Mac OS X中的sem_getvalue()功能失调 - C ++

时间:2013-05-20 17:44:28

标签: c++ macos semaphore

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

(我只是忽略了Mac用户在初始化信号量并销毁它时遇到很多问题......可以通过sem_open()和sem_unlink()来解决这个问题:D

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

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

谢谢

1 个答案:

答案 0 :(得分:8)

我想你在问,“我怎么能解决OS X上sem_getvalue()的缺席?”

我可以想到三种方法:

首先(在我看来,最好)重新设计你的程序,以便永远不需要信号量的当前值。毕竟,sem_getvaluesem_t报告的值在收到时不一定准确。

其次,如有必要,请包装POSIX信号量函数并保留自己的计数。每个sem_getvalue都可以通过计数器和保护该计数器的互斥锁进行装饰。您的实现可能会(并且可能应该具有!)与sem_getvalue具有相同的警告,也就是说,一旦检索到计数,就不能信任该计数。

第三,在我看来,最不合适的是切换到较旧且更复杂的as the documentation warns界面。这实现了与{{1}}类似的东西。