我正在尝试通过信号量为Mac OS X中的一堆线程实现共享内存的同步使用。
(我只是忽略了Mac用户在初始化信号量并销毁它时遇到很多问题......可以通过sem_open()和sem_unlink()来解决这个问题:D
但显然为了获取信号量的当前值,除了sem_getvalue()之外什么都没有,但是在mac os x中没有实现。
对于没有运行linux操作系统并且应该在几小时内上传作业的人的任何建议??!:)
谢谢
答案 0 :(得分:8)
我想你在问,“我怎么能解决OS X上sem_getvalue()
的缺席?”
我可以想到三种方法:
首先(在我看来,最好)重新设计你的程序,以便永远不需要信号量的当前值。毕竟,sem_getvalue
,sem_t
报告的值在收到时不一定准确。
其次,如有必要,请包装POSIX信号量函数并保留自己的计数。每个sem_getvalue
都可以通过计数器和保护该计数器的互斥锁进行装饰。您的实现可能会(并且可能应该具有!)与sem_getvalue
具有相同的警告,也就是说,一旦检索到计数,就不能信任该计数。
第三,在我看来,最不合适的是切换到较旧且更复杂的as the documentation warns界面。这实现了与{{1}}类似的东西。