數據庫共享鎖(讀鎖)與排它鎖(寫鎖)和 讀寫鎖的實現原理


共享鎖,又稱之為讀鎖,簡稱S鎖,當事務對數據加上讀鎖后,其他事務只能對該數據加讀鎖,不能做任何修改操作,也就是不能添加寫鎖。只有當數據上的讀鎖被釋放后,其他事務才能對其添加寫鎖。共享鎖主要是為了支持並發的讀取數據而出現的,讀取數據時,不允許其他事務對當前數據進行修改操作,從而避免”不可重復讀”的問題的出現。

排它鎖,又稱之為寫鎖,簡稱X鎖,當事務對數據加上寫鎖后,其他事務既不能對該數據添加讀寫,也不能對該數據添加寫鎖,寫鎖與其他鎖都是互斥的。只有當前數據寫鎖被釋放后,其他事務才能對其添加寫鎖或者是讀鎖。寫鎖主要是為了解決在修改數據時,不允許其他事務對當前數據進行修改和讀取操作,從而可以有效避免”臟讀”問題的產生。

 

讀寫鎖的實現原理

先搞清楚讀寫鎖要做什么。

基本就是 讀讀不互斥,讀寫互斥,寫寫互斥。可重入。

 

讀行為

當寫鎖未獲取,加上讀鎖(通知其他請求數據在讀狀態),讀數據

當寫鎖被獲取,等待,直到寫鎖未獲取,加讀鎖,讀數據

 

寫行為

當寫鎖未獲取,等待獲取寫鎖

當寫鎖被獲取,加寫鎖。讀鎖未獲取,等待獲取讀鎖

當寫鎖被獲取,讀鎖被獲取,寫數據

 

參考資料:

淺談數據庫共享鎖與排它鎖 - 知乎 (zhihu.com)

redis 讀寫鎖實現 - 雲+社區 - 騰訊雲 (tencent.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM