在Mac OS X – C中的sem_getvalue()功能失调

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

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

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

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

谢谢

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

我可以想到三种方法:

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

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

第三,在我看来最不可取的是,切换到更老,更复杂的SysV semaphore IPC界面.这实现了类似于sem_getvalue的东西.

https://stackoverflow.com/questions/16655153/sem-getvalue-dysfunctionality-in-mac-os-x-c

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在Mac OS X – C中的sem_getvalue()功能失调