對本書的贊譽
譯著序
序
前言
緻謝
作者簡介
第一部分 概念
第1章 概述
1.1 為什麼需要並發
1.2 程序架構與並發
1.3 並行的層次
1.4 為什麼不需要並發
1.5 小結
延伸閱讀
第2章 同步與時間
2.1 程序狀態的管理
2.1.1 共享狀態與私有狀態的區分
2.1.2 狀態機與時間
2.1.3 獨立性
2.1.4 不變性
2.2 同步:種類與實現技術
2.2.1 數據同步
2.2.2 協作與控製同步
2.3 小結
延伸閱讀
第二部分 機製
第3章 綫程
3.1 從高層麵上來看綫程
3.1.1 Windows綫程是什麼
3.1.2 CLR綫程是什麼
3.1.3 顯式綫程操作及其替代方法
3.2 綫程的誕生與消亡
3.2.1 綫程的創建
3.2.2 綫程終止
3.2.3 DllMain
3.2.4 綫程局部存儲
3.3 小結
延伸閱讀
第4章 綫程的高級內容
4.1 綫程的狀態
4.1.1 用戶態綫程棧
4.1.2 內部數據結構(KTHREAD、ETHREAD和TEB)
4.1.3 上下文
4.2 綫程的創建過程與終止過程
4.2.1 綫程創建的具體流程
4.2.2 綫程終止的具體流程
4.3 綫程調度
4.3.1 綫程的狀態
4.3.2 優先級
4.3.3 時間片
4.3.4 優先級與時間片調整
4.3.5 睡眠與退讓
4.3.6 掛起
4.3.7 關聯性:優先在某個CPU上運行
4.4 小結
延伸閱讀
第5章 Windows內核同步機製
5.1 基礎知識:觸發和等待
5.1.1 為什麼要使用內核對象
5.1.2 在非托管代碼中執行等待操作
5.1.3 托管代碼
5.1.4 異步過程調用
5.2 內核對象的使用
5.2.1 互斥體
5.2.2 信號量
5.2.3 互斥體/信號量使用示例:阻塞/有界的隊列
5.2.4 自動重置事件和手動重置事件
5.2.5 等待定時器
5.2.6 觸發對象與自動等待
5.2.7 內核對象的調試
5.3 小結
延伸閱讀
第6章 數據同步與控製同步
6.1 互斥
6.1.1 Win32臨界區
6.1.2 CLR鎖
6.2 讀/寫鎖(RWL)
6.2.1 WindowsVista中的輕量級讀/寫鎖
6.2.2.NEI框架中的輕量級讀/寫鎖
6.2.3.NET框架中原來的讀/寫鎖
6.3 條件變量
6.3.1 WindowsVista條件變量
6.3.2.NET框架的Monitor
6.3.3 被守護區域
6.4 小結
延伸閱讀
第7章 綫程池
7.1 綫程池的基本知識
7.1.1 三種方式:WindowsVista、Windows遺留代碼以及CLR
7.1.2 通用功能
7.2 Windows綫程池
7.2.1 WindowsVista綫程池
7.2.2 遺留的Win32綫程池
7.3 CLR綫程池
7.3.1 工作項
7.3.2 I/O完成端口
7.3.3 定時器
7.3.4 注冊等待
7.3.5 記住(再次提醒):你並不擁有這些綫程
7.3.6 綫程池的綫程管理
7.3.7 調試
7.3.8 案例分析:優先級分層以及在綫程池之上的隔離性
7.4 在使用綫程池時的性能
7.5 小結
延伸閱讀
第8章 異步編程模型
8.1 異步編程模型(APM)
8.1.1 匯集:四種方式
8.1.2 實現IAsyncResult
8.1.3 在.NET框架的哪些地方使用瞭APM
8.1.4 ASP.NET異步頁
8.2 基於事件的異步模式
8.2.1 基礎知識
8.2.2 支持取消
8.2.3 支持進度報告以及增量結果
8.2.4 在.NET框架的哪些地方將使用EAP
8.3 小結
延伸閱讀
第9章 縴程
9.1 縴程簡介優點與缺點
9.2 縴程的使用
9.2.1 創建新的縴程
9.2.2 將綫程轉換為縴程
9.2.3 判斷綫程是否為縴程
9.2.4 縴程間的切換
9.2.5 刪除縴程
9.2.6 切換當前綫程的示例
9.3 與縴程相關的其他主題
9.3.1 縴程局部存儲
9.3.2 綫程關聯性
9.3.3 案例分析:縴程與CLR
9.4 構建用戶態的調度器
9.4.1 實現
9.4.2 關於棧阻塞與無棧阻塞
9.5 小結
延伸閱讀
第三部分 技術
第10章 內存模型與無鎖編程
10.1 內存加載與存儲等操作的重新排序
10.1.1 實際運行的順序並非總是編寫的順序
10.1.2 將臨界域作為柵欄
10.1.3 數據依賴性及其對重排的影響
10.2 硬件原子性
10.2.1 普通加載指令和存儲指令的原子性
10.2.2 互鎖操作
10.3 內存一緻性模型
10.3.1 硬件內存模型
10.3.2 內存柵欄
10.3.3.NET內存模型
10.3.4 無鎖編程
10.4 低鎖代碼的示例
10.4.1 延遲初始化與雙重檢查鎖定
10.4.2 無阻塞棧和ABA問題
10.4.3 重新迴顧Dekker的算法
10.5 小結
延伸閱讀
第11章 並發的危害
11.1 正確性危害
11.1.1 數據競爭
11.1.2 遞歸與重入
11.1.3 鎖與進程關閉
11.2 活躍性危害
11.2.1 死鎖
11.2.2 遺失的喚醒
11.2.3 活鎖
11.2.4 鎖護送效應
11.2.5 “蜂擁”現象
11.2.6 兩步舞
11.2.7 優先級反轉與飢餓
11.3 小結
延伸閱讀
第12章 並行容器
12.1 細粒度鎖定
12.1.1 數組
12.1.2 FIFO隊列
12.1.3 鏈錶
12.1.4 字典(散列錶)
12.2 無鎖
12.2.1 無鎖FIFO隊列
12.2.2 工作密遷隊列
12.3 協作式容器
12.3.1 生産者/消費者數據結構
12.3.2 通過柵欄來分階段計算
12.4 小結
延伸閱讀
第13章 數據並行與任務並行
13.1 數據並行
13.2 任務並行
13.2.1 分支/閤並算法
13.2.2 數據流並行(Future抽象與Promise抽象)
13.2.3 遞歸
13.2.4 流水綫
13.2.5 查找
13.3 基於消息的並行
13.4 一些共同問題
13.4.1 並發的異常
13.4.2 取消
13.5 小結
延伸閱讀
第14章 性能與可伸縮性
14.1 並行硬件架構
14.1.1 SMP、CMP與HT
14.1.2 超標量執行
14.1.3 內存的層次結構
14.1.4 Visual Studio中的性能分析工具
14.2 加速比:並行代碼與串行代碼
14.2.1 決定“采用並行”
14.2.2 測量並行帶來的性能提升
14.2.3 Amdahl定律
12.2.4 關鍵路徑以及負載不均衡
14.2.5 垃圾收集與可伸縮性
14.3 自鏇等待
14.3.1 如何在Windows上正確地自鏇
14.3.2 純自鏇鎖
14.3.3 Mellor-Crummey-Scott(MCS)鎖
14.4 小結
延伸閱讀
第四部分 係統
第15章 輸入與輸齣
15.1 重疊I/O
15.1.1 重疊對象
15.1.2 Win32異步:I/O
15.1.3 .NET框架的異步I/O
15.2 I/O取消
15.2.1 當前綫程的異步I/O取消
15.2.2 其他綫程上的同步I/O取消
15.2.3 任意綫程的異步I/O取消
15.3 小結
延伸閱讀
第16章 圖形用戶界麵
16.1 GUI綫程模型
16.1.1 單綫程套間(STA)
16.1.2 響應度:它是什麼
16.2.NET異步GUI功能
16.2.1.NET的GUI框架
16.2.2 同步上下文
16.2.3 異步操作
16.2.4 一個方便的類:BackgroundWorker
16.3 小結
延伸閱讀
第五部分 附錄
附錄A 為.NET並發程序設計可重用的庫
附錄B .NET的並行擴展
· · · · · · (
收起)