第十五章 原子變數和非阻塞同步機制

2022-06-09 12:33:08 字數 557 閱讀 7087

1.非阻塞演算法

如果在演算法中,乙個執行緒的失敗或掛起不會導致其他執行緒也失敗或掛起,那麼這種演算法就稱為非阻塞演算法。如果這種演算法的每個步驟中都存在某個執行緒能夠執行下去,那麼這種演算法也稱為無鎖演算法。

這種演算法利用底層的原子機器指令代替鎖來確保資料在併發訪問中的一致性。

2.硬體對併發的支援

2.1 cas(compare-and-swap)

包含3個運算元——需要讀寫的記憶體位置、進行比較的值a和擬寫入的新值b。當且僅當v的值等於a時,cas才會通過原子的方式用新值b更新v的值。無論位置v的值是否等於a,都將返回v原有的值。

當多個執行緒嘗試使用cas同時更新乙個變數時,只有其中乙個執行緒能更新變數的值,其他執行緒都會失敗,然而,失敗的執行緒不會掛起。由於乙個執行緒在競爭cas時失敗不會阻塞,因此它可以決定是否重新嘗試,或執行一些恢復操作。

2.2 aba問題

解決方法:每次更新v的值和版本號。

3.原子變數類

原子變數類相當於一種泛化的volatile變數,能夠支援原子的和有條件的讀-改-寫操作。比鎖的粒度更細,量級更輕。原子變數將發生競爭的範圍縮小到單個變數上。

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...

learn with python 第十五章 繼承

第十六章 繼承 16.1繼承 物件導向語言所擁有的特性是繼承,繼承指定義乙個新的類擁有原來類的方法。繼承最大的好處就是可以在不改變現存 的情況下新增新的方法,稱之為繼承是因為新定義的類擁有父類的所有方法。新建立的類知之為子類。繼承是乙個功能強大的特性,某些情況下如果沒有繼承,一些層序幾乎無法實現。同...

第十五章 磁碟管理

uuid 掛載點swap 產品型別swap 掛載選項預設值default 預設不檢測,檢測順序 0 0 檢視分割槽 swapon s s表示show 手動掛載 swapon dev sda3 缺點 重啟後就消失,想永久生效,寫配置檔案 解除安裝分割槽 swapoff dev sda3 vim etc...