Mach信号量是否在进程之间的共享内存中工作?

时间:2012-06-20 17:56:58

标签: c macos ipc semaphore shared-memory

我有兴趣在共享内存中使用来自semaphore_create(task, sem, policy, value)的{​​{1}}创建的信号量来同步Mac OS中的两个进程。

我知道在使用mach/semaphore.h的Linux上,sem_init(sem, pshared, value)在这种情况下必须为非零,但是我找不到Mac上的信息(其中pshared没有实现),我真的不想使用命名的信号量,因为我需要创建它们。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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