鍍金池/ 問答/數(shù)據(jù)庫/ 歡樂鎖和悲觀鎖的小問題

歡樂鎖和悲觀鎖的小問題

前輩們好!問題如下:

面試的時候經(jīng)常被問道歡樂鎖和悲觀鎖的區(qū)別,小弟想知道,什么情況下用歡樂鎖,什么情況下用悲觀所,以及如何實現(xiàn)歡樂鎖和悲觀鎖?

問題有點多,謝謝回答。

回答
編輯回答
歆久

悲觀鎖是顯式的,樂觀鎖是MVCC

2017年5月6日 01:41
編輯回答
胭脂淚

簡單來說. 樂觀鎖就是先讓所有并發(fā)訪問都能訪問到數(shù)據(jù). 在他們提交數(shù)據(jù)的時候做版本判斷. 如果版本不對. 就提交失敗. 悲觀鎖就是 在并發(fā)訪問的時候排隊. 也可以看作是串行的提交. 比如redis. 用的就是樂觀鎖. 并發(fā)提交時. 先讓大家都獲取一個類似于版本記錄的值. 然后真正提交時. 會對比這個值. 如果不符合就提交失敗. 這樣保證只有一個能提交成功. 而悲觀鎖會在提交前 獲取一個類似于寫鎖的東西. 只準(zhǔn)一個人在那寫. 不能并發(fā). 比如mysql如果你select 的時候使用了 for update 這樣的語句. 也就相當(dāng)于手動加上了一個悲觀鎖.

2018年5月16日 03:13