systemV訊號量 與 Posix訊號量

2021-10-03 22:10:51 字數 1754 閱讀 1862

一、函式上的區別

訊號量有兩種實現:傳統的system v訊號量和新的posix訊號量。它們所提供的函式很容易被區分:對於所有system v訊號量函式,在它們的名字裡面沒有下劃線。例如,應該是semget()而不是sem_get()。然而,所有的的posix訊號量函式都有乙個下劃線。下面列出了它們提供的所有函式清單:

systm v posix

semctl() sem_getvalue()

semget() sem_post()

semop() sem_timedwait()

sem_trywait()

sem_wait()

sem_destroy()

sem_init()

sem_close()

sem_open()

sem_unlink()

二、使用上的區別

1、xsi system v的訊號量是訊號量集,可以包括多個訊號燈(有個陣列),每個操作可以同時操作多個訊號燈

posix是單個訊號燈,posix有名訊號燈支援程序間通訊,無名訊號燈放在共享記憶體中時可以用於程序間通訊。

2、posix訊號量在有些平台並沒有被實現,比如:suse8,而system v大多數linux/unix都已經實現。兩者都可以用於程序和執行緒間通訊。但一般來說,system v訊號量用於 程序間同步、有名訊號燈既可用於執行緒間的同步,又可以用於程序間的同步、posix無名用於同乙個程序的不同執行緒間,如果無名訊號量要用於程序間同步,訊號量要放在共享記憶體中。

3、posix有兩種型別的訊號量,有名訊號量和無名訊號量。有名訊號量像system v訊號量一樣由乙個名字標識。

4、posix通過sem_open單一的呼叫就完成了訊號量的建立、初始化和許可權的設定,而system v要兩步。也就是說posix 訊號是多執行緒,多程序安全的,而system v不是,可能會出現問題。

5、system v訊號量通過乙個int型別的值來標識自己(類似於呼叫open()返回的fd),而sem_open函式返回sem_t型別(長整形)作為posix訊號量的標識值。

6、對於system v訊號量你可以控制每次自增或是自減的訊號量計數,而在posix裡面,訊號量計數每次只能自增或是自減1。

7、posix無名訊號量提供一種非常駐的訊號量機制。

8、相關程序: 如果程序是從一已經存在的程序建立,並最終操作這個建立程序的資源,那麼這些程序被稱為相關的。

三、注意事項

1、posix有名訊號燈的值是隨核心持續的。也就是說,乙個程序建立了乙個訊號燈,這個程序結束後,這個訊號燈還存在,並且訊號燈的值也不會改變。當持有某個訊號燈鎖的程序沒有釋放它就終止時,核心並不給該訊號燈解鎖

2、posix有名訊號燈是通過核心持續的,乙個程序建立乙個訊號燈,另外的程序可以通過該訊號燈的外部名(建立訊號燈使用的檔名)來訪問它。posix基於記憶體的無名訊號燈的持續性卻是不定的,如果基於記憶體的訊號燈是由單個程序內的各個執行緒共享的,那麼該訊號燈就是隨程序持續的,當該程序終止時它也會消失。如果某個基於記憶體的訊號燈是在不同程序間同步的,該訊號燈必須存放在共享記憶體區中,這要只要該共享記憶體區存在,該訊號燈就存在。

四、總結

1、system v的訊號量一般用於程序同步, 且是核心持續的, api為:semget、semctl、semop

2、posix的有名訊號量一般用於程序同步, 有名訊號量是核心持續的. 有名訊號量的api為:sem_open、sem_close、sem_unlink

3、posix的無名訊號量一般用於執行緒同步, 無名訊號量是程序持續的, 無名訊號量的api為:sem_init、sem_destroy

linux 之 system v 訊號量

計數器,記錄可以訪問共享資源的次數。保護共享資源 硬體裝置,檔案,共享記憶體等等 訊號量大於0,則可以訪問 訊號量等於0,則不可以訪問。訪問時會將訊號量減1,訪問完成會將訊號量加1。加1減1可由使用者控制 訊號量減小到0之後,程序就不能去訪問共享資源了。int semget key t key,in...

systemV訊號量的使用案例

systemv訊號量處理的函式有 semget semctl semop include intsemget key t key int nsems,int sem 說明 解釋功能 建立乙個新的訊號量或獲取乙個已經存在的訊號量的鍵值。返回值成功返回訊號量的標識碼id 失敗返回 1。引數 解釋 key...

System V 訊號量使用相關函式

在提到posix 訊號量時,指的是二值訊號量或計數訊號量,而system v訊號量指的是入了計數訊號量集 二值訊號量 其值為0或1,類似於互斥鎖,資源被鎖住時為0,資源可用為1 計數訊號量 其值在0和某個限制值之間的訊號量,訊號量的值就是可用資源數 計數訊號量集 乙個或多個訊號量構成乙個集合,集合中...