互斥量又稱互斥鎖。互斥量是一個可以處於兩態之一的變量:解鎖和加鎖。
簡介
如果不需要
信號量的計數能力,有時可以使用信號量的一個簡化版本,稱為互斥量(
mutex)。互斥量僅僅適用於管理共享資源或一小段代碼。由於互斥量在實現時既容易又有效,這使得互斥量在實現
用戶空間線程包時非常有用。
互斥量是一個可以處於兩態之一的變量:解鎖和加鎖。這樣,只需要一個
二進制位表示它,不過實際上,常常使用一個
整型量,
0表示解鎖,而其他所有的值則表示加鎖。互斥量使用兩個過程。當一個
線程(或進程)需要訪問
臨界區時,它調用
mutex_lock。如果該互斥量當前是解鎖的(即臨界區可用),此調用成功,調用線程可以自由進入該臨界區。
另一方面,如果該互斥量已經加鎖,調用線程被阻塞,
直到在臨界區中的線程完成並調用mutex_unlock。如果多個線程被阻塞在該互斥量上,將
隨機選擇一個線程並允許它獲得鎖。