[英]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.