悲觀鎖:
比較悲觀, 每次去拿資料的時候, 都認為資料會被修改。所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會阻塞。像關係型資料庫裡邊就用到了很多這種鎖機制。
使用場景:但如果是多寫的情況,一般會經常產生衝突,所以一般多寫的場景下用悲觀鎖就比較合適。
樂觀鎖:
總是樂觀, 每次去拿資料的時候都認為別人不會修改,所以不會上鎖, 但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料。事先這個方法。
使用場景:
像樂觀鎖適用於寫比較少的情況下(多讀場景),即衝突真的很少發生的時候,這樣可以省去了鎖的開銷,加大了系統的整個吞吐量。
版本號機制
一般是在資料表中加上乙個資料版本號version欄位,表示資料被修改的次數,當資料被修改時,version值會加一。當執行緒a要更新資料值時,在讀取資料的同時也會讀取version值,在提交更新時,若剛才讀取到的version值為當前資料庫中的version值相等時才更新,否則重試更新操作,直到更新成功。
2. cas演算法
是一種有名的無鎖演算法。也就是在沒有執行緒被阻塞的情況下實現變數的同步,非阻塞同步(non-blocking synchronization)。
悲觀鎖 面試必備之 樂觀鎖與悲觀鎖
一 什麼是悲觀鎖?什麼是樂觀鎖?1 鎖 lock 在介紹樂觀鎖和悲觀鎖之前,我們先介紹下鎖。在日常生活中,我們經常接觸到鎖這個東西,比如家裡門上的鎖,自行車上的鎖,保險櫃上的鎖等,這些都是為了保障我們的財產安全而上的鎖。而在程式中,鎖是一種保障資料安全的機制和手段。在多併發的情況,當同時多個請求修改...
悲觀鎖與樂觀鎖
悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...
樂觀鎖與悲觀鎖
悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...