共享鎖,又稱之為讀鎖,簡稱S鎖,當事務對數據加上讀鎖后,其他事務只能對該數據加讀鎖,不能做任何修改操作,也就是不能添加寫鎖。只有當數據上的讀鎖被釋放后,其他事務才能對其添加寫鎖。共享鎖主要是為了支持並發的讀取數據而出現的,讀取數據時,不允許其他事務對當前數據進行修改操作,從而避免”不可重復讀”的問題的出現。
排它鎖,又稱之為寫鎖,簡稱X鎖,當事務對數據加上寫鎖后,其他事務既不能對該數據添加讀寫,也不能對該數據添加寫鎖,寫鎖與其他鎖都是互斥的。只有當前數據寫鎖被釋放后,其他事務才能對其添加寫鎖或者是讀鎖。寫鎖主要是為了解決在修改數據時,不允許其他事務對當前數據進行修改和讀取操作,從而可以有效避免”臟讀”問題的產生。
讀寫鎖的實現原理
先搞清楚讀寫鎖要做什么。
基本就是 讀讀不互斥,讀寫互斥,寫寫互斥。可重入。
讀行為
當寫鎖未獲取,加上讀鎖(通知其他請求數據在讀狀態),讀數據
當寫鎖被獲取,等待,直到寫鎖未獲取,加讀鎖,讀數據
寫行為
當寫鎖未獲取,等待獲取寫鎖
當寫鎖被獲取,加寫鎖。讀鎖未獲取,等待獲取讀鎖
當寫鎖被獲取,讀鎖被獲取,寫數據
參考資料: