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

Mor*_*ang 4 c++ macos semaphore

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

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

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

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

谢谢

pil*_*row 8

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

我可以想到三种方法:

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

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

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

  • 感谢您的回答,实际上我想要信号量的当前值仅用于调试,仅此而已;有没有办法在调试时找出该值??如果是这样就太好了! (2认同)