日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

各类锁(互斥锁,自旋锁,读写锁,乐观锁,悲观锁,死锁)

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 各类锁(互斥锁,自旋锁,读写锁,乐观锁,悲观锁,死锁) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

互斥鎖

當有一個線程要訪問共享資源(臨界資源)之前,會對線程訪問的這段代碼(臨界區)進行加鎖。如果在加鎖之后沒釋放鎖之前其他線程要對臨界資源進行訪問,則這些線程會被阻塞睡眠,直到解鎖,如果解鎖時有一個或者多個線程阻塞,那么這些鎖上的線程就會變成就緒狀態,然后第一個變為就緒狀態的線程就會獲取資源的使用權,并且再次加鎖,其他線程繼續阻塞等待。

讀寫鎖

也叫做共享互斥鎖,讀模式共享,寫模式互斥。有點像數據庫負載均衡的讀寫分離模式。它有三種模式:讀加鎖狀態,寫加鎖狀態和不加鎖狀態。簡單來說就是只有一個線程可以占有寫模式的讀寫鎖,但是可以有多個線程占用讀模式的讀寫鎖。
當寫加鎖的模式下,任何線程對其進行加鎖操作都會被阻塞,直到解鎖。
當在讀加鎖的模式下,任何線程都可以對其進行讀加鎖的操作,但所有試圖進行寫加鎖操作的線程都會被阻塞。直到所有讀線程解鎖。但是當讀線程太多時,寫線程一直被阻塞顯然是不對的,所以一個線程想要對其進行寫加鎖時,就會阻塞讀加鎖,先讓寫加鎖線程加鎖

自旋鎖

自旋鎖和互斥鎖很像,唯一不同的是自旋鎖訪問加鎖資源時,會一直循環的查看是否釋放鎖。這樣要比互斥鎖效率高很多,但是仍然需要占用CPU。所以自旋鎖適用于多核的CPU。但是還有一個問題是當自旋鎖遞歸調用的時候會造成死鎖現象。所以慎重使用自旋鎖。

樂觀鎖

這其實是一種思想,當線程去拿數據的時候,認為別的線程不會修改數據,就不上鎖,但是在更新數據的時候會通過版本來判斷其他線程是否修改了該數據。,如果數據被修改了就拒絕更新,之所以叫樂觀鎖是因為并沒有加鎖。

悲觀鎖

當線程去拿數據的時候,總假設別的線程會去修改數據,所以它每次拿數據的時候都會上鎖,別的線程去拿數據的時候就會阻塞。
這兩種鎖一般用于數據庫,當一個數據庫的讀操作遠遠大于寫的操作次數時,使用樂觀鎖會加大數據庫的吞吐量。

總結

以上是生活随笔為你收集整理的各类锁(互斥锁,自旋锁,读写锁,乐观锁,悲观锁,死锁)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。