在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ 第7章 無鎖并發(fā)數據結構設計
3.4 本章總結
6.3 基于鎖設計更加復雜的數據結構
6.1 為并發(fā)設計的意義何在?
5.2 <code>C++</code>中的原子操作和原子類型
A.7 自動推導變量類型
2.1 線程管理的基礎
8.5 在實踐中設計并發(fā)代碼
2.4 運行時決定線程數量
2.2 向線程函數傳遞參數
第4章 同步并發(fā)操作
2.3 轉移線程所有權
8.3 為多線程性能設計數據結構
6.4 本章總結
7.3 對于設計無鎖數據結構的指導建議
關于這本書
A.1 右值引用
2.6 本章總結
D.2 &lt;condition_variable&gt;頭文件
A.6 變參模板
6.2 基于鎖的并發(fā)數據結構
4.5 本章總結
A.9 本章總結
前言
第10章 多線程程序的測試和調試
5.4 本章總結
第9章 高級線程管理
5.1 內存模型基礎
2.5 識別線程
第1章 你好,C++的并發(fā)世界!
1.2 為什么使用并發(fā)?
A.5 Lambda函數
第2章 線程管理
4.3 限定等待時間
D.3 &lt;atomic&gt;頭文件
10.2 定位并發(fā)錯誤的技術
附錄B 并發(fā)庫的簡單比較
5.3 同步操作和強制排序
A.8 線程本地變量
第8章 并發(fā)代碼設計
3.3 保護共享數據的替代設施
附錄D C++線程庫參考
第7章 無鎖并發(fā)數據結構設計
D.7 &lt;thread&gt;頭文件
D.1 &lt;chrono&gt;頭文件
4.1 等待一個事件或其他條件
A.3 默認函數
附錄A 對<code>C++</code>11語言特性的簡要介紹
第6章 基于鎖的并發(fā)數據結構設計
封面圖片介紹
7.2 無鎖數據結構的例子
8.6 本章總結
8.1 線程間劃分工作的技術
4.2 使用期望等待一次性事件
8.4 設計并發(fā)代碼的注意事項
D.5 &lt;mutex&gt;頭文件
3.1 共享數據帶來的問題
資源
9.3 本章總結
10.3 本章總結
10.1 與并發(fā)相關的錯誤類型
D.4 &lt;future&gt;頭文件
3.2 使用互斥量保護共享數據
9.1 線程池
1.1 何謂并發(fā)
9.2 中斷線程
4.4 使用同步操作簡化代碼
A.2 刪除函數
1.3 C++中的并發(fā)和多線程
1.4 開始入門
第5章 C++內存模型和原子類型操作
消息傳遞框架與完整的ATM示例
8.2 影響并發(fā)代碼性能的因素
7.1 定義和意義
D.6 &lt;ratio&gt;頭文件
A.4 常量表達式函數
7.4 本章總結
1.5 本章總結
第3章 線程間共享數據

第7章 無鎖并發(fā)數據結構設計

本章主要內容

  • 設計無鎖并發(fā)數據結構
  • 無鎖結構中內存管理技術
  • 對無鎖數據結構設計的簡單指導

上一章中,我們了解了在設計并發(fā)數據結構時會遇到的問題,根據指導意見指引,確定設計的安全性。對一些通用數據結構進行檢查,并查看使用互斥鎖對共享數據進行保護的實現(xiàn)例子。第一組例子就是使用單個互斥量來保護整個數據結構,但之后的例子就會使用多個鎖來保護數據結構的不同部分,并且允許對數據結構進行更高級別的并發(fā)訪問。

互斥量是一個強大的工具,其可以保證在多線程情況下可以安全的訪問數據結構,并且不會有條件競爭或破壞不變量的情況存在。對于使用互斥量的代碼,其原因也是很簡單的:就是讓互斥量來保護數據。不過,這并不會如你所想的那樣;你可以回看一下第3章,回顧一下死鎖形成的原因,再回顧一下基于鎖的隊列和查詢表的例子,看一下細粒度鎖是如何影響并發(fā)的。如果你能寫出一個無鎖并發(fā)安全的數據結構,那么就能避免這些問題。

在本章中,我們還會使用原子操作(第5章介紹)的“內存序”特性,并使用這個特性來構建無鎖數據結構。設計這樣的數據結構時,要格外的小心,因為這樣的數據機構不是那么容易正確實現(xiàn)的,并且讓其失敗的條件很難復現(xiàn)。我們將從無鎖數據的定義開始;而后,將繼續(xù)通過幾個例子來了解使用無鎖數據結構的意義,最后給出一些通用的指導意見。