讀寫鎖是多執行緒同步的另外乙個機制。在一些程式中存在讀操作和寫操作問題,對某些資源的訪問會存在兩種可能情況,一種情況是訪問必須是排他的,就是獨佔的意思,這種操作稱作寫操作,另外一種情況是訪問方式是可以共享的,就是可以有多個執行緒同時去訪問某個資源,這種操作稱為讀操作。這個問題模型是從對檔案的讀寫操作中引申出來的。把對資源的訪問細分為讀和寫兩種操作模式,這樣可以大大增加併發效率。讀寫鎖比互斥鎖適用性更高,並行性也更高。
需要注意的是,這裡只是說並行效率比互斥高,並不是速度一定比互斥鎖快,讀寫鎖更複雜,系統開銷更大。併發性好對於使用者體驗非常重要,假設互斥鎖需要0.5秒,使用讀寫鎖需要0.8秒,在類似學生管理系統的軟體中,可能90%的操作都是查詢操作。如果突然有20個查詢請求,使用的是互斥鎖,則最後的查詢請求被滿足需要10秒,估計沒人接收。使用讀寫鎖時,因為讀鎖能多次獲得,所以20個請求中,每個請求都能在1秒左右被滿足,使用者體驗好的多。
二 讀寫鎖特點
1 如果乙個執行緒用讀鎖鎖定了臨界區,那麼其他執行緒也可以用讀鎖來進入臨界區,這樣可以有多個執行緒並行操作。這個時候如果再用寫鎖加鎖就會發生阻塞。寫鎖請求阻塞後,後面繼續有讀鎖來請求時,這些後來的讀鎖都將會被阻塞。這樣避免讀鎖長期占有資源,防止寫鎖飢餓。
2 如果乙個執行緒用寫鎖鎖住了臨界區,那麼其他執行緒無論是讀鎖還是寫鎖都會發生阻塞。
互斥鎖機制,互斥鎖與讀寫鎖區別
互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒 讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...
Linux 同步機制 讀寫鎖
讀寫鎖也叫 shared exclusive 鎖,也是一種同步機制。讀寫鎖有三種狀態 讀模式下加鎖,寫模式下加鎖,不加鎖。有如下的使用約定 讀模式共享,寫模式獨佔,適合讀頻率遠大於寫頻率的場景。這些api位於 pthread.h 下。initialize read write lock rwlock...
Linux原子操作,讀寫鎖機制
若干組合語言指令具有 讀 修改 寫 型別 也就是說,他們訪問儲存單元兩次,第一次讀原值,第二次寫新值。假定執行在兩個cpu上的兩個核心控制路徑試圖通過執行非原子操作來同時 讀 修改 寫 同乙個儲存器單元。首先,兩個cpu都試圖讀同乙個單元,但是儲存器仲裁器 對訪問ram晶元的操作進行序列化的硬體電路...