Posix 信號量與System v信號量的區別

在回答這個問題之前,首先要先了解什麼是Posix,什麼又是System V。

簡要的說,Posix是“可移植操作系統接口(Portable Operating System Interface )的首字母簡寫,但它並不是一個單一的標準,而是一個電氣與電子工程學會即IEEE開發的一系列標準,它還是由ISO(國際標準化組織)和IEC(國際電工委員會)採納的國際標準。而System v是Unix操作系統衆多版本的一個分支,它最初是由AT&T在1983年第一次發佈,System v一共有四個版本,而最成功的是System V Release 4,或者稱爲SVR4。這樣看來,一個是Unix 的標準之一(另一個標準是Open Group),一個是Unix衆多版本的分支之一(其他的分支還有Linux跟BSD),應該來說,Posix標準正變得越來越流行,很多廠家開始採用這一標準。

而信號量(semaphore)是一種用於提供不同進程間或一個給定進程的不同線程間同步手段的原語。信號量可以分爲:

1. 二值信號量(binary  semaphore):其值或爲0或爲1的信號量。這與互斥鎖類似,若資源被鎖住則信號量值爲0,若資源可用則信號量值爲1。

2. 計數信號量(counting semaphore):其值爲0和某個限制值(對於Posix信號量,該值必須至少爲32767)之間的信號量。該信號量的值就是可用資源數。

以上這兩種類型的信號中,等待(wait)操作都等待信號量的值變爲大於0,然後將它減1。掛出(post)操作則是將信號量的值加1。從而喚醒正在等待該信號量值變爲大於0的任意線程。

3. 計數信號量集(set of counting semaphore):一個或者多個信號量(構成一個集合),其中每個都是計數信號量。每個集合的信號量數都存在一個限制,一般在25個的數量級。

Posix信號量是基於內存的,即信號量值是放在共享內存中的,它是由可能與文件系統中的路徑名對應的名字來標識的。而System v信號量測試基於內核的,它放在內核裏面,相同點都是它們都可以用於進程或者線程間的同步。

當我們討論“System v信號量”時,所指的是計數信號量集,而當我們談論“Posix 信號量”時,所指的是單個計數信號量。

所以,說到這裏,你應該清楚這兩者之間的區別了吧。當然了,操作它們的API也是不一樣的,所以這就是爲什麼一個是用sem_init(),另一個用的是semget()來操作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章