【问题标题】:Does Mach semaphore work in shared memory between processes?马赫信号量是否在进程之间的共享内存中工作?
【发布时间】:2012-06-22 22:22:49
【问题描述】:

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

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

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

【问题讨论】:

  • Here 是一篇关于如何在进程之间共享马赫信号量的文章。请注意,您应该尽量避免使用 Mach 的东西,因为它在用户空间中的使用已被弃用。

标签: c macos ipc semaphore shared-memory


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-11
      • 1970-01-01
      • 2020-09-06
      • 2013-08-20
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多