【问题标题】:Differences between <semaphore.h> and <sys/sem.h><semaphore.h> 和 <sys/sem.h> 的区别
【发布时间】:2012-06-18 23:00:37
【问题描述】:

&lt;semaphore.h&gt;&lt;sys/sem.h&gt;中包含的功能有什么区别? 是否存在使用标题或其他更好的情况?

【问题讨论】:

    标签: c posix semaphore


    【解决方案1】:

    &lt;sys/sem.h&gt; 为 XSI(最初是 Unix System V)信号量提供接口。这些不是基本 POSIX 标准的一部分(它们在 XSI 选项中,主要是为了传统的 Unix 兼容性),虽然它们还没有被认为是过时/弃用的,但许多程序员认为它们已弃用,POSIX 建议:

    应用用途

    POSIX 实时扩展定义了用于进程间通信的替代接口。需要使用 IPC 的应用程序开发人员应该设计他们的应用程序,以便可以轻松修改使用 XSI 进程间通信中描述的 IPC 例程的模块以使用替代接口。

    XSI 信号量的优点和缺点在于它们是,并且必须由于其接口的工作方式,内核空间对象。这给您带来的主要好处是能够设置它们,以便在进程退出或意外终止时内核可以退出操作。主要成本是每个操作都是到内核空间的往返,即它们非常慢。使用它们的接口也非常晦涩难学,而且它们必然是进程共享资源,这意味着您必须处理共享命名空间和资源清理问题。

    &lt;semaphore.h&gt; 定义了 POSIX 信号量,这些信号量的设计方式使得它们可以完全在用户空间中实现,除非在有争议的情况下,进程将调用内核进入睡眠状态。它们的性能应该接近最佳(即几乎不可能击败你自己的),但它们的功能不如 XSI 信号量。 POSIX 信号量还为您提供了选择是否需要进程本地信号量(用于多线程环境,甚至在某些情况下,单线程程序中的信号处理程序)或进程共享信号量,在后一种情况下,您还可以选择是让系统按名称在共享命名空间中分配它,还是自己获取共享内存并在共享内存中初始化。

    【讨论】:

      【解决方案2】:

      它们不是相同的/相互替代的,而是两种不同的实现并提供不同的功能集。 semaphore.h 是 posix 实现,sys/sem.h 是 sysV 的实现。 POSIX 是considered 更轻量级和广泛使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-29
        • 2010-10-29
        • 1970-01-01
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        相关资源
        最近更新 更多