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原語中指明發送消息的源進程和消息。