繁体   English   中英

Mac OS X 中的 sem_getvalue() 功能障碍 - C++

[英]sem_getvalue() dysfunctionality in Mac OS X - C++

我正在尝试通过信号量为 Mac OS X 中的一堆线程实现共享内存的同步使用。

(我只是忽略了一个事实,即 Mac 用户在初始化信号量和销毁它时遇到了很多问题......,可以通过 sem_open() 和 sem_unlink() 修复):D

但显然为了获取信号量的当前值,除了 sem_getvalue() 没有在 mac os x 中实现。

对于没有运行 linux 操作系统并且应该在几小时内上传作业的人有什么建议吗??!:)

谢谢

我想您是在问, “我如何解决 OS X 上没有sem_getvalue()问题?”

我可以想到三种方法:

首先(在我看来最好)重新设计您的程序,以便永远不需要信号量的当前值。 毕竟, 正如文档所警告的那样sem_getvalue报告的值在收到时不一定准确。

其次,如有必要,包装 POSIX 信号量函数并保持自己的计数。 每个sem_t都可以装饰一个计数器和一个保护该计数器的互斥锁。 您的实现可能会有(并且可能应该有!)与sem_getvalue相同的警告, sem_getvalue ,一旦检索到计数,就不能相信它是准确的。

第三,在我看来最不愉快的是,切换到更老、更复杂的SysV 信号量 IPC接口。 这实现了类似于sem_getvalue东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM