我有兴趣在共享内存中使用来自semaphore_create(task, sem, policy, value)
的{{1}}创建的信号量来同步Mac OS中的两个进程。
我知道在使用mach/semaphore.h
的Linux上,sem_init(sem, pshared, value)
在这种情况下必须为非零,但是我找不到Mac上的信息(其中pshared
没有实现),我真的不想使用命名的信号量,因为我需要创建它们。
我尝试了一个最小的例子它似乎不起作用,所以我想知道我做错了什么或它只是不起作用。我也对其他进程间锁定替代方案持开放态度。
答案 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,所以我无法测试任何东西,但我认为没有任何理由说明无法使用未命名的信号量。