C++多線程 第一章 你好,C++并發世界
第一章 你好,C++并發世界
C++并發
并發(concurrency): 主要包括 任務切換 與 硬件并發 兩類.
并發(concurrency) 實際上與 多線程(multithreading) 存在差異.
并發的種類
任務切換(task switching): 計算機在某一時刻只可以真正執行一個任務,但它可以每秒切換任務許多次.通過做一點這個任務然后再做一點別的任務,看起來像是任務在并行發生.這就是:任務切換(task switching).
硬件并發(hardware concurrency): 無論擁有多個處理器或一個多核處理器,這些計算機能夠真正并行運行超過一個任務.為了實行交替進行,系統在從一個任務切換到另一個時都需要進行 上下文切換(context switch).決定其效率最重要的因素是 硬件線程(hardware threads) 的數量.
并發的方法
多進程并發: 將應用程序分為多個獨立的單線程進程,它們通過通信互相傳遞信息.
多線程并發: 在單個進程中運行多個線程.
并發的應用情景
任務并行(task parallelism): 將一個單一任務分成幾部分并且各自并行執行,從而降低總運行時間.
數據并行(data parallelism): 一個線程執行算法的一部分,而另一個線程執行算法的另一部分;或者每個線程在不同的數據部分上執行相同的操作.
C++并發的特征
資源獲得即初始化(RAII): C++標準保證任何情況下,已構造的對象最終會銷毀,即它的析構函數最終會被調用.通過這種方式可以保證線程在退出相關作用域時互斥元被解鎖.
抽象懲罰(abstraction penalty): 與直接使用底層的低級工具相比,使用高級工具所帶來的實現成本一般會更多.
C++并發程序
我們前面已經學習過OpenMP解決并發問題的方式了,現在讓我們快速進入如何使用C++解決并發問題.
下面是一個常見的Hello World程序:
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
return 0;
}
讓我們來將其并行化:
#include <iostream>
#include <thread>
void hello()
{
std::cout << "Hello Concurrent World\n";
}
int main()
{
std::thread t(hello);
t.join();
return 0;
}
這是我們第一個通過C++執行并行化的程序,這很值得我們慶祝,不是嗎?
晚上去吃門口的那個什么銅鼎鍋吧,記得吃麻醬碟(

浙公網安備 33010602011771號