樂觀鎖與悲觀鎖
獨佔鎖是一種悲觀鎖,synchronized就是一種獨佔鎖,它假設壞的情況,並且只有在確保其它執行緒不會造成干擾 的情況下執行,會導致其它所有需要鎖的執行緒掛起,等待持有鎖的執行緒釋放鎖。而另乙個更加有效的鎖就 是樂觀 鎖。 所謂樂觀鎖就是,每次不加鎖而是假設沒有衝突而去完成某項操作,如果因為衝突失敗就重試,直 到成功為 止。 cas無鎖演算法
要實現無鎖(lock-free)的非阻塞演算法有多種實現方法,其中 cas(比較與交換,compare and swap) 是 一種有 名的無鎖演算法。cas, cpu指令,在大多數處理器架構中都支援呼叫。 cas的語義是「我認為v的值應該 為a,如果 是,那麼將v的值更新為b,否則不修改並告訴v的值實際為多少」 。
cas是項樂觀鎖技術,當多個執行緒嘗試使用cas同時更新同乙個變數時,只有其中乙個執行緒能更新變數的值, 而其 它執行緒都失敗,失敗的執行緒並不會被掛起,而是被告知這次競爭中失敗,並可以再次嘗試。 cas有3個操作 數,內 存值v,舊的預期值a,要修改的新值b。當且僅當預期值a和記憶體值v相同時,將記憶體值v修改為b,否 則什麼都不 做。 cas無鎖演算法的c實現如下:
int compare_and_swap (int* reg, int oldval, int newval)
以上翻譯過來就是指當兩者進行比較時,如果相等,則證明共享資料沒有被修改,替換成新值,然後繼續往下 運 行;如果不相等,說明共享資料已經被修改,放棄已經所做的操作,然後重新執行剛才的操作。
悲觀鎖與樂觀鎖
悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...
樂觀鎖與悲觀鎖
悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...
樂觀鎖與悲觀鎖
鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...