互斥量與訊號量
互斥量和訊號量都提供同步服務,但它們並不相同。下面將詳細介紹互斥量和訊號量。
互斥量
互斥量是一個互斥物件,用於同步對資源的訪問。它在程式開始時使用唯一名稱建立。互斥量是一種鎖定機制,確保一次只有一個執行緒可以獲取互斥量並進入臨界區。該執行緒僅在退出臨界區時才會釋放互斥量。
以下示例說明了這一點:
wait (mutex); ….. Critical Section ….. signal (mutex);
互斥量與訊號量不同,互斥量是一種鎖定機制,而訊號量是一種訊號機制。二進位制訊號量可以作為互斥量使用,但互斥量永遠不能用作訊號量。
訊號量
訊號量是一種訊號機制,等待訊號量的執行緒可以由另一個執行緒發出訊號。這與互斥量不同,因為互斥量只能由呼叫等待函式的執行緒發出訊號。
訊號量使用兩個原子操作(等待和發出訊號)進行程序同步。
如果其引數 S 為正,則等待操作會遞減其引數 S 的值。如果 S 為負或零,則不執行任何操作。
wait(S) { while (S<=0); S--; }
發出訊號操作會遞增其引數 S 的值。
signal(S) { S++; }
訊號量主要有兩種型別:計數訊號量和二進位制訊號量。
計數訊號量是整數值訊號量,並且具有不受限制的值域。這些訊號量用於協調資源訪問,其中訊號量計數是可用資源的數量。
二進位制訊號量類似於計數訊號量,但其值限制為 0 和 1。當訊號量為 1 時,等待操作才有效;當訊號量為 0 時,發出訊號操作才成功。
廣告