1. 程式人生 > >互斥鎖 自旋鎖 讀寫鎖的區別

互斥鎖 自旋鎖 讀寫鎖的區別

轉自:https://blog.csdn.net/swl1993831/article/details/77948930

 

【互斥鎖】:共享資源的使用是互斥的,即一個執行緒獲得資源的使用權後就會將該資源加鎖,使用完後會將其解鎖,如果在使用過程中有其他執行緒想要獲取該資源的鎖,那麼它就會被阻塞陷入睡眠狀態,直到該資源被解鎖才會被喚醒,如果被阻塞的資源不止一個,那麼它們都會被喚醒,但是獲得資源使用權的是第一個被喚醒的執行緒,其它執行緒又陷入沉睡.

遞迴鎖:同一個執行緒可以多次獲得該資源鎖,別的執行緒必須等該執行緒釋放所有次數的鎖才可以獲得。


【讀寫鎖】:它擁有讀狀態加鎖、寫狀態加鎖、不加鎖這三種狀態。
只有一個執行緒可以佔有寫狀態的鎖,但可以有多個執行緒同時佔有讀狀態鎖,這也是它可以實現高併發的原因。當其處於寫狀態鎖下,任何想要嘗試獲得鎖的執行緒都會被阻塞,直到寫狀態鎖被釋放;如果是處於讀狀態鎖下,允許其它執行緒獲得它的讀狀態鎖,但是不允許獲得它的寫狀態鎖,直到所有執行緒的讀狀態鎖被釋放;為了避免想要嘗試寫操作的執行緒一直得不到寫狀態鎖,當讀寫鎖感知到有執行緒想要獲得寫狀態鎖時,便會阻塞其後所有想要獲得讀狀態鎖的執行緒。所以讀寫鎖非常適合資源的讀操作遠多於寫操作的情況。


【自旋鎖】:自旋鎖是一種特殊的互斥鎖,當資源被枷鎖後,其他執行緒想要再次加鎖,此時該執行緒不會被阻塞睡眠而是陷入迴圈等待狀態(不能在做其它事情),迴圈檢查資源持有者是否已經釋放了資源,這樣做的好處是減少了執行緒從睡眠到喚醒的資源消耗,但會一直佔用CPU的資源。適用於資源的鎖被持有的時間短,而又不希望線上程的喚醒上花費太多資源的情況。
--------------------- 
作者:亮大王 
來源:CSDN 
原文:https://blog.csdn.net/swl1993831/article/details/77948930 
版權宣告:本文為博主原創文章,轉載請附上博文連結!