為實現保護共享資源而提出一種鎖機制。其實,自旋鎖與互斥鎖比較類似,它們都是為了解決對某項資源的互斥使用。無論是互斥鎖,還是自旋鎖,在任何時刻最多只能有乙個保持者,即任何時刻最多只能有乙個執行單元獲得鎖。但是兩者在排程機制上略有不同。對於互斥鎖,如果資源已經被占用,資源申請者只能進入睡眠狀態。但是自旋鎖不會引起呼叫者睡眠,如果自旋鎖已經被別的執行單元保持,呼叫者就一直迴圈在那裡檢查是否該自旋鎖的保持者已經釋放了鎖,」自旋」一詞就是因此而得名。
讀寫鎖實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。
如果讀寫鎖當前沒有讀者,也沒有寫者,那麼寫者可以立刻獲得讀寫鎖,否則它必須自旋在那裡,直到沒有任何寫者或讀者。
如果讀寫鎖沒有寫者,那麼讀者可以立即獲得該讀寫鎖,否則讀者必須自旋在那裡,直到寫者釋放該讀寫鎖。
讀寫鎖posix中定義及例項:
根據上述原則,偽**實現如下:
count_mutex = mutex_init();
write_mutex = mutex_init();
// 讀寫鎖上讀者的計數
read_count = 0;
// 讀者加鎖
void read_lock
unlock(count_mutex);
}// 讀者開鎖
void read_unlock
unlock(count_mutex);
}//能不能上寫鎖,得看讀者們
void write_lock
void write_unlock
參考資料
linux多執行緒開發
讀寫鎖機制
多執行緒鎖的問題
public class synctest start new thread new runnable start class a catch interruptedexception e system.out.println i public void f2 catch interruptedex...
Linux多執行緒互斥鎖
多執行緒程式設計中,多執行緒程式設計 可以用互斥鎖 也稱互斥量 可以用來保護關鍵 段,以確保其獨佔式的訪問,這有點像二進位制訊號量。posix互斥鎖相關函式主要有以下5個 cpp view plain copy include intpthread mutex init pthread mutex ...
linux多執行緒(互斥鎖)
當多個執行緒想要對同乙個資源進行操作的時候,為了使得不出現髒讀的情況,要用互斥鎖來規定執行緒的先後順序。互斥鎖和訊號量的作用類似。鎖的資料型別 pthread mutex t mutes 鎖的初始化 int pthread mutex init pthread mutex t const pthre...