互斥鎖作用的理解

2021-08-26 05:41:34 字數 1178 閱讀 5479

互斥鎖的建立

1.pthread_mutex_t mutex=pthread_mutex_initializer;

2.pthread_mutex_t mutex;

pthread_mutex_init(&mutex);

以上兩種方式都行

互斥鎖在乙個執行緒中的使用
pthread_mutex_

t mutex=pthread_mutex_

initializer;//建立互斥鎖並初始化

pthread_mutex_

lock(&mutex);//對執行緒上鎖,此時其他執行緒阻塞等待該執行緒釋放鎖

----

要執行的**段

----

pthread_mutex_

unlock(&mutex);//執行完後釋放鎖

那麼為什麼要將要執行的的**加鎖後再執行呢

先了解一下原子操作的概念

假如現在有兩個執行緒都在修改乙個全域性變數

int

number = 10

;void

p(void

)void

q(void

)int

main(void

)

執行上面這段程式,最後number的值是多少?你可能會說如果先加,那麼最終結果就是22,否則就是21。真的是這樣嗎?其實並不是的

上圖為執行+=操作的步驟,方框為暫存器,在加一時,先從變數空間拿出變數值,然後在暫存器中加一,最後將加一的值放回變數空間將原值覆蓋,從而完成一次加操作。

上圖表示了兩個執行緒對全域性變數操作的一種情況,執行緒1和2都拿到number的初始值,執行緒1操作後將11放回變數空間,但是執行緒2不久後將20也放回變數空間將11覆蓋。

所以互斥鎖就是為了避免這種情況,在乙個執行緒修改變數時加鎖,則其他變數阻塞,等待加鎖的變數解鎖後再執行,這樣避免了如圖的情況和其他的異常情況。

以上就是我對學到的互斥鎖作用的理解,如有錯誤歡迎指正

golang之讀寫鎖,互斥鎖的理解

golang sync包裡提供了 locker介面 互斥鎖 mutex 讀寫鎖 rwmutex用於處理併發過程中可能出現同時兩個或多個協程 或執行緒 讀或寫同乙個變數的情況。在併發的情況下,多個執行緒或協程同時去修改乙個變數。使用鎖能保證在某一時間點內,只有乙個協程或執行緒修改這一變數,具體我們可以...

互斥鎖機制,互斥鎖與讀寫鎖區別

互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒 讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...

鎖 互斥鎖,死鎖

當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制 執行緒同步能夠保證多個執行緒安全訪問競爭資源,最簡單的同步機制是引入互斥鎖。互斥鎖為資源引入乙個狀態 鎖定 非鎖定 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執行緒不能更改 直到該執行緒釋放資源,將資源的狀態變...