【问题标题】:Is semaphore an IPC mechanism?信号量是 IPC 机制吗?
【发布时间】:2011-01-15 15:19:13
【问题描述】:

信号量是 IPC 机制吗?

【问题讨论】:

    标签: ipc semaphore


    【解决方案1】:

    是的,在许多平台下,信号量可以跨进程同步。您可以为此使用“命名”信号量——多个进程通过名称访问对象,类似于文件系统对象。

    在 POSIX 中,您可以通过 @987654321@ 创建命名信号量。对于未命名的信号量,如果@987654322@ 的第二个参数不为零,则它可以是进程间的,尽管我不确定未命名的进程间信号量应该如何工作。

    请注意,在某些系统上,如果不支持进程间信号量(例如 OpenBSD),这些函数可能会失败并显示 ENOSYS

    在 Windows 中,您可以通过 @sergiom 提到的 @987654323@ 创建命名信号量。

    【讨论】:

    • 自 5.4 版(2013 年 11 月)以来,OpenBSD 拥有named semaphores。见this blog post
    • 回复:“我不确定未命名的进程间信号量应该如何工作”:您可以将信号量放在共享内存中。此外,如果您在普通内存中创建一个未命名的进程间信号量,然后调用fork(),那么您在父进程和子进程之间就有了 IPC。当然,在这两种情况下,未命名的信号量都不会像命名的信号量那样被发现。但是,无论如何,如果进程之间存在其他关系,您通常只需要一个信号量。
    【解决方案2】:

    取决于操作系统

    在 Windows 中,可以使用 CreateSemaphore() 和 OpenSemaphore() 函数在进程之间访问命名信号量

    http://msdn.microsoft.com/en-us/library/ms682438%28VS.85%29.aspx

    【讨论】:

      【解决方案3】:

      实际上 Semaphore 是一个同步工具,但它被视为 IPC,因为它被多个进程访问

      【讨论】:

        【解决方案4】:

        POSIX 信号量可以是未命名的或 命名。未命名的信号量是 在进程内存中分配和 初始化。未命名的信号量可能 可以被多个进程使用, 取决于信号量如何 分配和初始化。 [...]

        你想知道more吗?

        【讨论】:

          猜你喜欢
          • 2014-03-04
          • 1970-01-01
          • 1970-01-01
          • 2014-04-24
          • 1970-01-01
          • 2012-08-13
          • 2020-08-08
          • 1970-01-01
          • 2016-05-09
          相关资源
          最近更新 更多