進程同步的幾種方式


1、信號量
     用於進程間傳遞信號的一個整數值。在信號量上只有三種操作可以進行:初始化,P操作和V操作,這三種操作都是原子操作。
     P操作(遞減操作)可以用於阻塞一個進程,V操作(增加操作)可以用於解除阻塞一個進程。
 
     基本原理是兩個或多個進程可以通過簡單的信號進行合作,一個進程可以被迫在某一位置停止,直到它接收到一個特定的信號。該信號即為信號量s。
     為通過信號量s傳送信號,進程可執行原語semSignal(s);為通過信號量s接收信號,進程可執行原語semWait(s);如果相應的信號仍然沒有發送,則進程被阻塞,直到發送完為止。
     可把信號量視為一個具有整數值的變量,在它之上定義三個操作:
  •  一個信號量可以初始化為非負數
  • semWait操作使信號量s減1.若值為負數,則執行semWait的進程被阻塞。否則進程繼續執行。
  • semSignal操作使信號量加1,若值大於或等於零,則被semWait操作阻塞的進程被解除阻塞。

 

 

2、管程
     管程是由一個或多個過程、一個初始化序列和局部數據組成的軟件模塊,其主要特點如下:
  • 局部數據變量只能被管程的過程訪問,任何外部過程都不能訪問。
  • 一個進程通過調用管程的一個過程進入管程。
  • 在任何時候,只能有一個進程在管程中執行,調用管程的任何其他進程都被阻塞,以等待管程可用。
     管程通過使用條件變量提供對同步的支持,這些條件變量包含在管程中,並且只有在管程中才能被訪問。有兩個函數可以操作條件變量:
  • cwait(c):調用進程的執行在條件c上阻塞,管程現在可被另一個進程使用。
  • csignal(c):恢復執行在cwait之后因為某些條件而阻塞的進程。如果有多個這樣的進程,選擇其中一個;如果沒有這樣的進程,什么以不做。

 

3、消息傳遞
     消息傳遞的實際功能以一對原語的形式提供:
  • send(destination,message)
  • receive(source,message)
     這是進程間進程消息傳遞所需要的最小操作集。
     一個進程以消息的形式給另一個指定的目標進程發送消息;
     進程通過執行receive原語接收消息,receive原語中指明發送消息的源進程和消息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM