2012-06-15 108 views

回答

14

<sys/sem.h>爲XSI(原來的Unix系統V)信號量提供了接口。這些不是基本POSIX標準的一部分(它們在XSI選項中主要用於傳統的Unix兼容性),雖然它們不被認爲是過時/不贊成,但許多程序員認爲它們已被廢棄,POSIX建議:

應用使用

POSIX實時擴展定義進程間通信的替代接口。需要使用IPC的應用程序開發人員應該設計他們的應用程序,以便使用XSI進程間通信中描述的IPC例程的模塊可以很容易地修改爲使用替代接口。

XSI信號量的優點和缺點是,它們是並且必須是由於它們的接口工作的方式,內核空間對象。這給你的主要好處是能夠設置它們,以便在進程退出或意外終止時內核可以退出操作。主要的代價是每個操作都是往返於內核空間的往返行程,即它們非常緩慢。使用它們的界面也非常呆板而且很難學,它們必然是一個流程共享資源,這意味着您必須處理共享名稱空間和資源清理問題。

<semaphore.h>定義了POSIX信號量,它們的設計方式可以完全在用戶空間中實現,除非進程調用內核進入休眠狀態的競爭情況除外。他們的表現應該接近最佳(即幾乎不可能打敗你自己),但它們不如XSI信號量那樣有特色。 POSIX信號量還爲您提供是否需要進程本地信號量(用於多線程環境,甚至在某些情況下,單線程程序中的信號處理程序)還是進程共享信號量的選擇,在後一種情況下,您還可以選擇是讓系統按名稱將其分配到共享名稱空間中,還是自己獲取共享內存並將其初始化到共享內存中。

4

它們不是相同/彼此替換,而是兩個不同的實現並提供不同的功能集。 semaphore.h是posix實現,sys/sem.h是sysV的實現。 POSIX是considered更輕,並廣泛使用。

相關問題