關於posix sem的一些常見的問題

來源:互聯網
上載者:User

linux中支援很多標準,關於訊號量(semaphore  )有二種標準給予支援,有posix sem和system V sem ,你要問這是什麼東東,那你就去自己baidu一下了,要多活動一下自己的筋骨曉得不 ^_^  

首先,我們來說說這二種sem的區別:

posix                                                                                                                                                             

1、不能在多個(無關係的)進程間使用                

2、只是一個訊號量

 

system V                   

1、可在多個無關的進程間使用

2、是一個訊號量集                         

 

還有就是 posix sem操作簡單 而system V相對要複雜得多。OK,我們這裡主要要說的是posix sem下的二值訊號量的處理問題:

 

訊號量機制
  1965年,荷蘭學者提出了利用訊號量機制解決進程同步問題,訊號量正式成為有效進程同步工具,現在訊號量機制被廣泛的用於單處理機和多處理機系統以及電腦網路中。
  訊號量S是一個整數,S大於等於零時代表可供並發進程使用的資源實體數,但S小於零時則表示正在等待使用臨界區的進程數。
  Dijkstra同時提出了對訊號量操作的PV原語。(這裡為什麼是PV二字母喃 ,原來是這個荷蘭學者英語學得和我一樣差 ???還是和我一樣愛國???以至於只能用本國的意思和 wait post這二單詞意思差不多的二個以p v 開頭的單詞 )呵呵 
  P原語操作的動作是:
  (1)S減1;
  (2)若S減1後仍大於或等於零,則進程繼續執行;
  (3)若S減1後小於零,則該進程被阻塞後進入與該訊號相對應的隊列中,然後轉進程調度。
  V原語操作的動作是:
  (1)S加1;
  (2)若相加結果大於零,則進程繼續執行;
  (3)若相加結果小於或等於零,則從該訊號的等待隊列中喚醒一等待進程,然後再返回原進程繼續執行或轉進程調度。
  PV操作對於每一個進程來說,都只能進行一次,而且必須成對使用。在PV原語執行期間不允許有中斷的發生。

 

二值訊號量:是指 只有0 和 1 這二個值的訊號量    也就是說初始值是1或0     我們這裡假定 初始值是1  那麼 當對其進行wait操作的時候,此值就減一為0了 那麼就會阻塞所有的當前進程中的其它的訊號 和 訊號量;等待post 的到來 ,當post到來後,就釋放掉了阻塞,其它的操作就可以運行了。這種方法常常用來實現一個臨界區的原子執行,有關原子 執行的概念請看我前面的文章,把想要進行原子操作的代碼放到 wait和 post之間,就不會受到其它訊號或其它進程或線程對其所作的影響了,這也相當於互斥操作。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.