4

我有兴趣在共享内存中使用使用semaphore_create(task, sem, policy, value)from创建的信号量mach/semaphore.h来同步 Mac OS 中的两个进程。

我知道在 Linux 上使用sem_init(sem, pshared, value),pshared在这种情况下必须为非零,但是我在 Mac 上找不到信息(sem_init未实现的地方),而且我真的不想使用命名信号量,因为我需要创建很多其中。

我尝试了一个最小的示例,但它似乎不起作用,所以我想知道是我做错了什么还是它不起作用。我也对其他进程间锁定替代方案持开放态度。

4

2 回答 2

1

OSX 不支持匿名信号量。实现函数调用是为了获得 posix 合规性,但是如果您检查返回代码,它们实际上会出现未实现的错误。我在这里写了一篇关于 OSX 和未命名信号量的详细信息,以及一个建议的解决方案: Unnamed-semaphores-and-pososx

于 2015-04-29T11:22:45.200 回答
0

这是关于 semaphore_create 和朋友的文档: https ://developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KernelProgramming/synchronization/synchronization.html

我没有 Mac,所以我无法测试任何东西,但我看不出有任何理由说明为什么无法使用未命名的信号量。

于 2012-09-14T19:15:12.047 回答