5

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

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

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

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

谢谢

4

1 回答 1

10

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

我可以想到三种方法:

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

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

第三,在我看来,最不受欢迎的是,切换到更旧、更复杂的SysV 信号量 IPC接口。这实现了类似于sem_getvalue.

于 2013-05-20T18:05:26.137 回答