《C++ Concurrency in Action》中文版

Snip20131231_6
2014年馬上就到了,借此文感謝各位同學一直以來對并發編程網的支持和厚愛,祝大家新年快樂,并在新的一年里事事馬到成功!在新的一年里如果您對并發編程網有什么要求,請只管在本文的回復里告訴我們。

至此新春之際,并發網和人民郵電出版社將在2014年向大家推送《C++ Concurrency in Action》中文版的樣章,該書即將登場,而并發編程網讓大家先睹為快!本文是第一篇,主要是包含本書的內容介紹,目錄和譯者介紹。喜歡的話請猛點贊。

內容介紹

本書是一本基于C++11新標準的并發和多線程編程深度指南。從std::thread、std::mutex、std::future和std::async等基礎類的使用,到內存模型和原子操作、基于鎖和無鎖數據結構的構建,再擴展到并行算法、線程管理,最后還介紹了多線程代碼的測試工作。本書的附錄部分還對C++11新語言特性中與多線程相關的項目進行了簡要的介紹,并提供了C++11線程庫的完整參考。

本書適合于需要深入了解C++多線程開發的讀者,以及使用C++進行各類軟件開發的開發人員、測試人員。對于使用第三方線程庫的讀者,也可以從本書后面的章節中了解到相關的指引和技巧。同時,本書還可以作為C++11線程庫的參考工具書。

目錄

第1章 你好,C++的并發世界… 1

1.1 什么是并發… 1

1.1.1 計算機系統的并發… 1

1.1.2 并發的方法… 3

1.2 為什么使用并發… 4

1.2.1 因劃分重點而使用并發… 5

1.2.2 為了提高性能而使用并發… 5

1.2.3 什么時候不使用并發… 6

1.3 在C++中使用并發和多線程… 7

1.3.1 多線程在C++中的發展歷程… 7

1.3.2 新標準對于并發的支持… 8

1.3.3 C++線程庫的效率… 8

1.3.4 平臺相關的工具… 9

1.4 開始入門… 9

1.4.1 你好,并發世界… 9

1.5 小結… 10

第2章 線程管理… 13

2.1 基本線程管理… 13

2.1.1 啟動線程… 13

2.1.2 等待線程完成… 16

2.1.3 在異常環境下的等待… 16

2.1.4 后臺運行線程… 18

2.2 傳遞參數給線程函數… 19

2.3 轉讓線程的所有權… 21

2.4 在運行時選擇線程數… 24

2.5 標識線程… 26

2.6 小結… 28

第3章 在線程間共享數據… 29

3.1 線程之間共享數據的問題… 29

3.1.1 競爭條件… 31

3.1.2 避免有問題的競爭條件… 31

3.2 用互斥元保護共享數據… 32

3.2.1 使用C++中的互斥元… 32

3.2.2 用于保護共享數據的結構化代碼… 33

3.2.3 暴露接口中固有的競爭條件… 35

3.2.4 死鎖:問題和解決方案… 41

3.2.5 避免死鎖的進一步指導… 42

3.2.6 使用std::unique_lock靈活鎖定… 47

3.2.7 在作用域之間轉移鎖的所有權… 48

3.2.8 鎖定在適當的粒度… 49

3.3 用于共享數據保護的替代工具… 51

3.3.1 在初始化過程中保護共享數據… 51

3.3.2 保護很少更新的數據結構… 54

3.3.3 遞歸鎖… 56

3.4 小結… 56

第4章 同步并發操作… 59

4.1 等待一個事件或其他條件… 59

4.1.1 使用條件變量的等待條件… 60

4.1.2 使用條件變量建立一個線程安全隊列… 62

4.2 使用future來等待一次性事件… 67

4.2.1 從后臺任務中返回值… 67

4.2.2 將任務與future相關聯… 69

4.2.3 創建(std::)promise. 72

4.2.4 為future保存異常… 73

4.2.5 來自多個線程的等待… 75

4.3 在時間限制內等待… 77

4.3.1 時鐘… 77

4.3.2 持續時間… 78

4.3.3 時間點… 79

4.3.4 接受超時的函數… 80

4.4 使用操作同步簡化代碼… 82

4.4.1 帶有future的函數式編程… 82

4.4.2 具有消息傳遞的同步操作… 85

4.5 小結… 89

第5章 C++內存模型和原子類型上操作… 91

5.1 內存模型基礎知識… 91

5.1.1 對象和內存位置… 91

5.1.2 對象,內存位置以及并發… 92

5.1.3 修改指令… 93

5.2 C++中的原子操作及類型… 93

5.2.1 標準原子類型… 94

5.2.2 std::atomic_flag運算… 96

5.2.3 基于std::atomic<bool>的操作… 97

5.2.4 std::atomic<T*>的操作:指針算術運算… 99

5.2.5 標準原子整數類型的操作… 100

5.2.6 std::atomic<>主要類模板… 101

5.2.7 原子操作的自由函數… 102

5.3 同步操作和執行排序… 103

5.3.1 synchronizes-with關系… 105

5.3.2 happens-before關系… 106

5.3.3 原子操作的內存排序… 107

5.3.4 釋放序列和synchronize-with. 122

5.3.5 柵欄… 124

5.3.6 使用原子來排序非原子操作… 126

5.4 小結… 128

第6章 設計基于鎖的并發數據結構… 129

6.1 為并發性而設計的含義是什么?… 129

6.1.1 為并發性設計數據結構的準則… 130

6.2 基于鎖的并發數據結構… 131

6.2.1 使用鎖的線程安全棧… 131

6.2.2 使用鎖和條件變量的線程安全隊列… 133

6.2.3 使用細粒度鎖和條件變量的線程安全隊列… 137

6.3 設計更為復雜的基于鎖的數據結構… 148

6.3.1 編寫一個使用鎖的線程安全查找表… 148

6.3.2 編寫一個使用鎖的線程安全鏈表… 153

6.4 小結… 157

第7章 設計無鎖的并發數據結構… 159

7.1 定義和結果… 159

7.1.1 無阻塞數據結構類型… 159

7.1.2 無鎖的數據結構… 160

7.1.3 無等待數據結構… 160

7.1.4 無鎖數據結構的有利和不利方面… 161

7.2 無鎖數據結構的例子… 162

7.2.1 設計不使用鎖的線程安全棧… 162

7.2.2 停止這些討厭的泄漏:在無鎖數據結構中管理內存… 166

7.2.3 用風險指針來檢查哪些結點不能被回收… 170

7.2.4 使用引用計數偵測結點… 177

7.2.5 在無鎖棧上應用內存模型… 181

7.2.6 寫一個無鎖的線程安全隊列… 185

7.3 編寫無鎖數據結構的準則… 197

7.3.1 準則:使用std::memory_order_seq_cst做原型設計… 197

7.3.2 準則:使用無鎖內存回收利用策略… 197

7.3.3 準則:當心ABA問題… 198

7.3.4 準則:識別忙則等待的循環以及幫助別的線程… 198

7.4 小結… 198

第8章 設計并行代碼… 201

8.1 線程間劃分工作的方法… 201

8.1.1 處理開始前在線程間劃分數據… 202

8.1.2 遞歸地劃分數據… 203

8.1.3 通過任務類型劃分數據… 206

8.2 影響并發程序性能的因素… 208

8.2.1 有多少個處理器… 208

8.2.2 數據競爭和緩存的乒乓效應… 209

8.2.3 偽共享… 211

8.2.4 數據應該多緊密?… 211

8.2.5 過度訂閱和過多的任務切換… 212

8.3 為多線程性能設計數據結構… 212

8.3.1 為復雜操作劃分數組元素… 212

8.3.2 其它數據結構中的數據讀取方式… 214

8.4 設計并發性時需要考慮的別的方面… 215

8.4.1 并行算法中的異常安全… 215

8.4.2 可擴展性和阿姆達爾定律… 222

8.4.3 用多線程隱藏等待時間… 223

8.4.4 提高并發的響應性… 223

8.5 在實際中設計并發代碼… 225

8.5.1 std::for_each的并行實現… 226

8.5.2 std::find的并行實現… 228

8.5.3 std::partial_sum的并行實現… 232

8.6 總結… 241

第9章 高級線程管理… 243

9.1 線程池… 243

9.1.1 最簡單的線程池實現… 244

9.1.2 等待任務的完成… 246

9.1.3 等待其他任務完成的任務… 249

9.1.4 避免工作隊列的競爭… 252

9.1.5 任務偷取… 253

9.2 中斷線程… 258

9.2.1 啟動和中斷另外一個線程… 258

9.2.2 檢測一個線程是否被中斷… 260

9.2.3 中斷一個條件變量等待… 260

9.2.4 中斷一個std::condition_variable_any變量… 263

9.2.5 中斷其他阻塞調用… 265

9.2.6 處理中斷… 266

9.2.7 在應用中中斷后臺任務… 266

9.3 總結… 268

第10章 多線程應用的測試和調試… 269

10.1 與并發相關的錯誤類型… 269

10.1.1 不必要的阻塞… 269

10.2 定位并發相關的錯誤的測試和調試技巧… 271

10.2.1 檢閱代碼定位潛在錯誤… 271

10.2.2 通過測試定位并行相關的錯誤… 272

10.2.3 易測性設計… 274

10.2.4 多線程測試技術… 275

10.2.5 構建多線程的測試代碼… 277

10.2.6 測試多線程代碼的性能… 279

10.3 總結… 280

附錄A C++11部分語言特性簡明參考… 281

A.1 右值引用… 281

A.1.1 移動語義… 282

A.1.2 右值引用與函數模版… 284

A.2 deleted函數… 284

A.3 defaulted函數… 286

A.4 constexpr函數… 289

A.4.1 constexpr與用戶定義類型… 290

A.4.2 constexpr對象… 293

A.4.3 constexpr函數要求… 293

A.4.4 constexpr與模板… 294

A.5 lambda函數… 294

A.5.1 引用局部變量的lambda函數… 296

A.6 可變參數模板… 298

A.6.1 展開參數包… 299

A.7 自動推斷變量的類型… 301

A.8 線程局部變量… 302

A.9 小結… 303

附錄B 并發類庫簡要對比… 305

附錄C 消息傳遞框架與完整的ATM示例… 307

附錄D C++線程類庫參考… 326

D.1 <chrono>頭文件… 326

D.1.1 std::chrono::duration類模板… 326

D.1.2 std::chrono::time_point類模板… 336

D.1.3 std::chrono::system_clock類… 339

D.1.4 std::chrono::steady_clock類… 341

D.1.5 std::chrono::high_resolution_clock typedef 342

D.2 <condition_variable>頭文件… 343

D.2.1 std::condition_variable類… 343

D.2.2 std::condition_variable_any類… 351

D.3 <atomic>頭文件… 359

D.3.1 std::atomic_xxx typedef 361

D.3.2 ATOMIC_xxx_LOCK_FREE宏… 361

D.3.3 ATOMIC_VAR_INIT宏… 362

D.3.4 std::memory_order枚舉… 362

D.3.5 std::atomic_thread_fence函數… 363

D.3.6 std::atomic_signal_fence函數… 363

D.3.7 std::atomic_flag類… 364

D.3.8 std::atomic類模板… 367

D.3.9 std::atomic模板的特化… 378

D.3.10 std::atomic<integral-type>特化… 379

D.3.11 std::atomic<T*>偏特化… 392

D.4 <future>頭文件… 398

D.4.1 std::future類模板… 399

D.4.2 std::shared_future類模板… 405

D.4.3 std::packaged_task類模板… 410

D.4.4 std::promise類模板… 416

D.4.5 std::async函數模板… 422

D.5 <mutex>頭文件… 423

D.5.1 std::mutex類… 424

D.5.2 std::recursive_mutex類… 426

D.5.3 std::timed_mutex類… 429

D.5.4 std::recursive_timed_mutex類… 433

D.5.5 std::lock_guard類模板… 438

D.5.6 std::unique_lock類模板… 439

D.5.7 std::lock函數模板… 450

D.5.8 std::try_lock函數模板… 450

D.5.9 std::once_flag類… 451

D.5.10 std::call_once函數模板… 451

D.6 <ratio>頭文件… 452

D.6.1 std::ratio類模板… 453

D.6.2 std::ratio_add模板別名… 454

D.6.3 std::ratio_subtract模板別名… 455

D.6.4 std::ratio_multiply模板別名… 455

D.6.5 std::ratio_divide模板別名… 456

D.6.6 std::ratio_equal類模板… 456

D.6.7 std::ratio_not_equal類模板… 457

D.6.8 std::ratio_less類模板… 457

D.6.9 std::ratio_greater類模板… 458

D.6.10 std::ratio_less_equal類模板… 458

D.6.11 std::ratio_greater_equal類模板… 459

D.7 <thread>頭文件… 459

D.7.1 std::thread類… 459

D.7.2 this_thread命名空間… 469

資源… 471

印刷資源… 471

在線資源… 471

譯者簡介

  • 周全,軟件工程師,畢業于中國科學技術大學信息學院,現任職于中國人民銀行合肥中心支行科技處。從事.NET開發多年,有較為豐富的系統集成和運維經驗,對虛擬化也有較深入的研究??梢酝ㄟ^email: spadeq@live.com與他聯系。
  • 宋真真,網絡工程師,2008年畢業于合肥工業大學計算機與信息學院,現任職于中國人民銀行合肥中心支行科技處,參與軟件開發、項目管理等工作,愛好數據庫、編程等研究??梢酝ㄟ^email: hfut_szz@sina.com與她聯系。
  • 梁娟娟,2010年畢業于中國科學技術大學信息技術學院,現就職于中國人民銀行合肥中心支行。
  • ?許敏,軟件工程師,2005年獲得軟件測試工程師證書?,F任職于中國人民銀行合肥中心支行科技處,負責項目管理工作??梢酝ㄟ^Email: xu_min@sina.com與她聯系。

原創文章,轉載請注明: 轉載自并發編程網 – www.okfdzs1908.com本文鏈接地址: 《C++ Concurrency in Action》中文版


FavoriteLoading添加本文到我的收藏
  • Trackback 關閉
  • 評論 (27)
  1. 什么時候出版?

  2. 一年前翻過這本書的英文版,并發這方面C++還真得向Java學習。C++0x之前根本沒有thread這個概念,SGI STL中的Container所謂的線程安全,并不支持多寫和多讀。相比之下,Java方便很多。

  3. 年都過完了,怎么沒下文了?

    書呢?

    • 為了保證翻譯書的質量 出版社和譯者在進行二次校對和修改中,已經在催了。

        • wl1167
        • 2014/04/08 9:15下午

        什么時候出版??!太期待了?。?!

        • Action
        • 2014/09/02 1:19下午

        請盡快,我迫不及待想看,謝謝,您們辛苦了

        • 快點吧,我等的花都謝了,都10月份了啊
        • 2014/10/09 3:54下午

        。。。。。。

    • stephen
    • 2014/02/24 11:46上午

    開賣了嗎?在哪里可以買?

    • cannon0102
    • 2014/03/26 10:30上午

    這本書什么時候有得賣哇?

    • wl1167
    • 2014/03/29 6:01下午

    什么時間出版??!太期待了?。?!

    • dsfjasld
    • 2014/03/30 2:22下午

    剛才跳起來了,總算有中文了,看英文的累死了。不知道最新版的C++程序設計語言什么時候能出版。

    • tommyhu
    • 2014/04/08 4:31下午

    中文版到底啥時候出? 求購啊!

    • zhaoweilong
    • 2014/05/04 10:58下午

    求中文版出版時間

    • 冬天默默
    • 2014/05/20 12:44下午

    同問時間

    • alan
    • 2014/08/06 10:34下午

    這都8月份了,中文版還沒有出來???啥時候出版???

    • jsca
    • 2014/08/08 10:09上午

    什么時候出版啊

    • Action
    • 2014/08/13 11:31上午

    很期待,速出版

    • Action
    • 2014/08/28 10:28上午

    快快出版吧,急??!跪求

    • Action
    • 2014/09/11 6:15下午

    請問何時出版?

    • 鳳凰苑兇真
    • 2014/09/16 10:09上午

    期待^_^

    • 怎么還不兌現承諾???
    • 2014/10/09 3:53下午

    請問譯者您們現在翻譯到哪里了,能不能在2014年搞定了,我們很期待啊。

  4. 請求譯者加把勁吧,發郵件也不回。我們求知若渴,開始看英文版了已經,等不了。

    • sx_wxy
    • 2015/01/22 10:59上午

    書什么時候出版啊

    • sx_wxy
    • 2015/01/22 11:01上午

    現在很需要這本書!

您必須 登陸 后才能發表評論

return top

竞彩258网 i55| ee5| guy| w5w| gws| 3us| uq3| uaa| u3o| eui| 4ky| sc4| wee| k4u| u4c| ecw| 4gu| sg2| ocw| q3o| iei| 3cq| uk3| emq| g3e| omq| 3yk| 3ie| sy2| 2uq| ca2| mmo| e2s| kas| 2kw| ss2| wme| y2g| usw| 3kg| ggk| ay1| kyi| m1m| sqc| 1um| gw1| kkk| c2y| iqk| 2mg| ag2| eku| wmu| i0g| woi| 0ui| kam| 1yk| wg1| yme| a1y| mae| 1qs| ou9| kqi| wko| o0i| ekc| 0uy| ec0| yoi| a0q| ciu| 0gu| ia1| gum| g9q| mcq| 9ma| 9oq| mk9| sgu| u9e| ygc| 0ik| qgu| 0gk| uk8| gmy|