
執行緒
|
237
排他鎖
有許多技術可以讓關鍵區變成不可分割,解決方案包括單指令以及大的程式碼區塊。
最常見的技術是
上鎖
(
lock
)機制,此機制可確保關鍵區內的排他性,使其呈現原子
性。因為上鎖機制可達到排他性,它們在 Pthread(及其他地方)就是著名的
排他鎖
(
mutex
)。
3
此鎖的工作原理與真實世界的鎖類似:把房間想像成關鍵區。沒有鎖,人們(執行緒)
可以隨意進出房間(關鍵區)。具體來說,房間裡一次可以不止一個人。所以我們會替
房間安上了一扇門,而且門上有一個鎖。我們為門配了一把鑰匙。當有一個人(執行
緒)來到門旁,他會發現鑰匙就在門外。他會使用鑰匙開門,走進房間,然後從房內把
門鎖上。沒有人可以進入。然後,他可以在房內做自己的事而不會被打斷。沒有人可以
同時佔用房間;它是一個排他資源。當房內的人完成事情後,他會開門並離開房間,把
鑰匙放在門外。然後,下一個人可以進入房間,鎖上門,重複以上的步驟。
執行緒環境中的鎖,工作原理大致相同。程式設計者需要定義鎖,確保在進入關鍵區之
前能夠取得它。鎖的實作需確保一次只有一個執行緒持有鎖。若鎖已由另一個執行緒所
使用,新的執行緒在繼續下去之前必須等待它。當關鍵區裡的工作完成後,必須把鎖釋
出,讓正在等待的執行緒(如果有的話)能夠取得鎖以便繼續執行下去。
第 7 章〈爭用情況〉一節曾舉了一個銀行提款的例子。讓我們來看看一個排他鎖如何阻
止災難性(至少對銀行而言)的爭用情況。我們稍後才會探討如何操作 Pthread 所提供
的排他鎖(見第 7 章〈Pthread ...