互斥鎖

互斥鎖 ( 縮寫 Mutex ） 是一種用於多線程編程中 ， 防止兩條線程同時對同一公共資源 （ 比如全域變數 ） 進行讀寫的機制 。 該目的通過將代碼切片成一個一個的臨界區域 （ critical section ） 達成 。 臨界區域指的是一塊對公共資源進行存取的代碼 ， 並非一種機制或是算法 。 一個程序 、 進程 、 線程可以擁有多個臨界區域 ， 但是並不一定會應用互斥鎖 。 需要此機制的資源的例子有 ： 旗標 、 隊列 、 計數器 、 中斷處理程序等用於在多條並行運行的代碼間傳遞數據 、 同步狀態等的資源 。 維護這些資源的同步 、 一致和完整是很困難的 ， 因爲一條線程可能在任何一個時刻被暫停 （ 休眠 ） 或者恢復 （ 喚醒 ） 。 例如 ： 一段代碼 （ 甲 ） 正在分步修改一塊數據 。 這時 ， 另一條線程 （ 乙 ） 由於一些原因被喚醒 。 如果乙此時去讀取甲正在修改的數據 ， 而甲碰巧還沒有完成整個修改過程 ， 這個時候這塊數據的狀態就處在極大的不確定狀態中 ， 讀取到的數據當然也是有問題的 。 更嚴重的情況是乙也往這塊地方寫數據 ， 這樣的一來 ， 後果將變得不可收拾 。 因此 ， 多個線程間共享的數據必須被保護 。 達到這個目的的方法 ， 就是確保同一時間只有一個臨界區域處於運行狀態 ， 而其他的臨界區域 ， 無論是讀是寫 ， 都必須被掛起並且不能獲得運行機會 。