C++11 併發程式設計指南——前言
開場白:前一段時間(大概在8月初)開始寫 《C++11 併發程式設計指南》(最早更新於:http://www.cnblogs.com/haippy),但是由於個人能力有限,加上 9 月初到現在一直在忙著找工作(革命尚未成功),精力有限,難免出現錯誤,希望讀者不吝指正。
另外,這是我在併發程式設計網上寫的第一篇文章,終於邁開了第一步。受@騰飛同學的鼓勵,後續我會在本站持續更新與 C++ 併發程式設計(尤其是C++11併發程式設計)相關的文章,但由於個人水平有限,希望讀者指出我的錯誤,並多多包涵
相關推薦
C++11 併發程式設計指南——前言
開場白:前一段時間(大概在8月初)開始寫 《C++11 併發程式設計指南》(最早更新於:http://www.cnblogs.com/haippy),但是由於個人能力有限,加上 9 月初到現在一直在忙著找工作(革命尚未成功),精力有限,難免出現錯誤,希望讀者不吝指正。 另外,這是我在併發程式設
C++11併發程式設計:原子操作atomic
一:概述 專案中經常用遇到多執行緒操作共享資料問題,常用的處理方式是對共享資料進行加鎖,如果多執行緒操作共享變數也同樣採用這種方式。 為什麼要對共享變數加鎖或使用原子操作?如兩個執行緒操作同一變數過程中,一個執行緒執行過程中可能被核心臨時掛起,這就是執行緒切換,當核心再次切換到該執行緒時,之前的資
[C++11 併發程式設計] 07
假設有兩個執行緒,在執行某些操作時,都需要鎖定一對mutex,執行緒A鎖定了mutex A,而執行緒B鎖定了額mutex B,它們都在等待對方釋放另一個mutex,這就會導致這兩個執行緒都無法繼續執行。這種情況就是死鎖。 避免死鎖最簡單的方法是總是以相同的順序對兩個mute
C++11 併發程式設計基礎(一):併發、並行與C++多執行緒
正文 C++11標準在標準庫中為多執行緒提供了元件,這意味著使用C++編寫與平臺無關的多執行緒程式成為可能,而C++程式的可移植性也得到了有力的保證。另外,併發程式設計可提高應用的效能,這對對效能錙銖必較的C++程式設計師來說是值得關注的。 回到頂部 1. 何為併發 併發指的是兩個或多個獨立的活動在同
[C++11 併發程式設計] 11
上一節,我們瞭解瞭如何對執行緒之間的共享資源進行保護的方法。但是,有些時候,我們需要線上程之間進行同步操作。一個執行緒等待另一個執行緒完成某項工作後,再繼續自己的工作。比如,某個執行緒需要等待一個訊息,或者某個條件變成true。接下來幾節,我們會看到如何使用C++標準庫來做
C++11 併發程式設計教程&學習筆記
C++11 併發程式設計教程&學習筆記 為了能夠編譯本文的示例程式碼,你需要有一個支援 C++11 的編譯器,筆者使用的是 TDM-GCC4.9.2 C++11 併發程式設計教程 - Part 1 : thread 初探
C++11併發程式設計(一)——初始C++11多執行緒庫
1 前言 C++11標準在標準庫中為多執行緒提供了元件,這意味著使用C++編寫與平臺無關的多執行緒程式成為可能,而C++程式的可移植性也得到了有力的保證。 在之前我們主要使用的多執行緒庫要麼
[C++11 併發程式設計] 17 超時等待
之前我們看到的所有等待機制都是不會超時的,也就是說,等待某個同步事件的執行緒會一直掛起。有些情況下,我們希望設定一個最長等待時間,使得程式可以繼續與使用者進行互動,使得使用者可以取消這個操作。我們先來看看C++11提供的時鐘類clock: clock clock提供瞭如下四
[C++11 併發程式設計] 15 承諾promise
假設有一個應用程式應用程式用於處理大量的網路連線,通常我們會為每一個連線建立單獨的處理執行緒。當執行緒數量較少時,這樣是可行的,但是隨著連線數量的增加,大量的執行緒需要消耗大量的系統資源。這樣,使用較少的執行緒,每個執行緒處理多個連線更為合適。 std::promise&l
[C++11 併發程式設計] 04
C++標準模板庫提供了一個輔助函式 - std::thread::hardware_concurrency(),通過這個函式,我們可以獲取應用程式可以真正併發執行的執行緒數量。下面這個例子,實現了一個併發版本的std::accumulate,它將工作拆分到多個執行緒中,為了
C++11 併發指南六(atomic 型別詳解一 atomic_flag 介紹)
C++11 併發指南已經寫了 5 章,前五章重點介紹了多執行緒程式設計方面的內容,但大部分內容只涉及多執行緒、互斥量、條件變數和非同步程式設計相關的 API,C++11 程式設計師完全可以不必知道這些 API 在底層是如何實現的,只需要清楚 C++11 多執行緒和非同步程
C++11 併發指南六( 型別詳解二 std::atomic )
C++11 併發指南六(atomic 型別詳解一 atomic_flag 介紹) 一文介紹了 C++11 中最簡單的原子型別 std::atomic_flag,但是 std::atomic_flag 過於簡單,只提供了 test_and_set 和 clear 兩個 API,不能滿足其他需求(如 s
C++11 併發指南七(C++11 記憶體模型一:介紹)
第六章主要介紹了 C++11 中的原子型別及其相關的API,原子型別的大多數 API 都需要程式設計師提供一個 std::memory_order(可譯為記憶體序,訪存順序) 的列舉型別值作為引數,比如:atomic_store,atomic_load,atomic_exchange,atomic_compa
C++11 併發指南系列
本系列文章主要介紹 C++11 併發程式設計,計劃分為 9 章介紹 C++11 的併發和多執行緒程式設計,分別如下: C++11 併發指南三(std::mutex 詳解)(本章計劃 1-2 篇,已完成 2 篇) C++11 併發指南四(future 詳解)(本章計劃 3 篇,已完成 3 篇)
C++11 併發指南三(std::mutex 詳解)
上一篇《C++11 併發指南二(std::thread 詳解)》中主要講到了 std::thread 的一些用法,並給出了兩個小例子,本文將介紹 std::mutex 的用法。 Mutex 又稱互斥量,C++ 11中與 Mutex 相關的類(包括鎖型別)和函式都宣告在 <mutex> 標頭檔案中
C++11 併發指南五(std::condition_variable 詳解)
前面三講《C++11 併發指南二(std::thread 詳解)》,《C++11 併發指南三(std::mutex 詳解)》分別介紹了 std::thread,std::mutex,std::future 等相關內容,相信讀者對 C++11 中的多執行緒程式設計有了一個最基本的認識,本文將介紹 C++11 標
C++11 併發指南六( 型別詳解二 std::atomic )
C++11 併發指南六(atomic 型別詳解一 atomic_flag 介紹) 一文介紹了 C++11 中最簡單的原子型別 std::atomic_flag,但是 std::atomic_flag 過於簡單,只提供了 test_and_set 和 clear 兩個 API,不能滿足其他需求(如 store
C++11 併發指南三(Lock 詳解)
在 《C++11 併發指南三(std::mutex 詳解)》一文中我們主要介紹了 C++11 標準中的互斥量(Mutex),並簡單介紹了一下兩種鎖型別。本節將詳細介紹一下 C++11 標準的鎖型別。 C++11 標準為我們提供了兩種基本的鎖型別,分別如下: std::lock_guard,與 Mute
C++11 併發指南四( 詳解三 std::future & std::shared_future)
上一講《C++11 併發指南四(<future> 詳解二 std::packaged_task 介紹)》主要介紹了 <future> 標頭檔案中的 std::packaged_task 類,本文主要介紹 std::future,std::shared_future 以及 std::fu
C++11 併發指南六(atomic 型別詳解三 std::atomic (續))
integral fetch_add(integral, memory_order = memory_order_seq_cst) volatile; integral fetch_add(integral, memory_order = memory_order_seq_cst); integral