Linux的4種鎖機制

2021-10-08 17:42:33 字數 834 閱讀 2181

互斥鎖:mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒

pthread_mutex_init:初始化互斥鎖

pthread_mutex_destroy:銷毀互斥鎖

pthread_mutex_lock:以原子操作的方式給乙個互斥鎖加鎖,如果目標互斥鎖已經被上鎖,pthread_mutex_lock呼叫將阻塞,直到該互斥鎖的佔有者將其解鎖。

pthread_mutex_unlock:以乙個原子操作的方式給乙個互斥鎖解鎖。

讀寫鎖:rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直到寫鎖釋放時被喚醒。 注意:寫鎖會阻塞其它讀寫鎖。當有乙個執行緒獲得寫鎖在寫時,讀鎖也不能被其它執行緒獲取;寫者優先於讀者(一旦有寫者,則後續讀者必須等待,喚醒時優先考慮寫者)。適用於讀取資料的頻率遠遠大於寫資料的頻率的場合。

自旋鎖:spinlock,在任何時刻同樣只能有乙個執行緒訪問物件。但是當獲取鎖操作失敗時,不會進入睡眠,而是會在原地自旋,直到鎖被釋放。這樣節省了執行緒從睡眠狀態到被喚醒期間的消耗,在加鎖時間短暫的環境下會極大的提高效率。但如果加鎖時間過長,則會非常浪費cpu資源。

rcu:即read-copy-update,在修改資料時,首先需要讀取資料,然後生成乙個副本,對副本進行修改。修改完成後,再將老資料update成新的資料。使用rcu時,讀者幾乎不需要同步開銷,既不需要獲得鎖,也不使用原子指令,不會導致鎖競爭,因此就不用考慮死鎖問題了。而對於寫者的同步開銷較大,它需要複製被修改的資料,還必須使用鎖機制同步並行其它寫者的修改操作。在有大量讀操作,少量寫操作的情況下效率非常高。

linux核心鎖機制

核心鎖的討論 為什麼需要核心鎖?多核處理器下,會存在多個程序處於核心態的情況,而在核心態下,程序是可以訪問所有核心資料的,因此要對共享資料進行保護,即互斥處理 有哪些核心鎖機制?1 原子操作 atomic t資料型別,atomic inc atomic t v 將v加1 原子操作比普通操作效率要低,...

linux系統的互斥鎖機制

2016年12月16日 17 34 48 這兩天開始看linux下的執行緒程式設計,看到了關於互斥鎖這一塊兒,寫了乙個小例項如下 但是偶爾結果也會是這樣子的 就被掛起了,不執行向下的操作了。最後想來了問題所在 輸出1的那個執行緒如果先執行,輸出2的執行緒接下來執行,輸出3的執行緒最後執行。那麼到了p...

python鎖機制 python的鎖機制

鎖 lock lock 指令鎖 是可用的最低階的同步指令。lock處於鎖定狀態時,不被特定的執行緒擁有。lock包含兩種狀態 鎖定和非鎖定,以及兩個基本的方法。可以認為lock有乙個鎖定池,當執行緒請求鎖定時,將執行緒至於池中,直到獲得鎖定後出池。池中的執行緒處於狀態圖中的同步阻塞狀態。構造方法 l...