博客原文:www.freehacker.com
C++11中引入了多線程編程,一般教科書中都沒有涉及到這個概念,但是在工作中多線程卻又是必不可少的。本文會展示最基本的Hello World, Concurrency程序。
概述
C++11之後,多線程終於被支持了,C++開發者再也不需要藉助boost等第三方庫的力量,來實現跨平臺的並行編程。語言層面上的支持,能夠讓開發者更加專注於業務邏輯,從而減少對系統平臺的關注。C++11多線程的引入,讓C++編程更加高效和簡便。
最近一直研究多線程編程,忽然有感,如果我每掌握一個知識點,便分享出來,這比我矇頭死學更加高效。如果我的使用不正確,也有機會被指出來。所以便想整理網絡或者書籍上所能學到的東西,寫一個教程出來,力求能讓剛入門不久的C++開發者,也能輕鬆的掌握併發編程的奧妙。
本教程不涉及太多原理性東西,需要那些知識的可以百度,或者買本《C++併發編程實戰》,網路上或書籍裏原理性的東西已經夠多了,我想寫的是讓讀者看完之後,能夠很輕鬆的知道,該怎麼用C++的多線程機制。其中,很多內容都是來自網路或者書籍上,感謝各位大神慷慨的分享。
如果沒有特殊提及,本教程的所以代碼都是基於Visual Studio 2013,如果更換其他編譯器有可能無法運行。
Hello World
經典的Hello World式開端。
#include <iostream>
#include <thread>
void hello()
{
std::cout << "Hello world, concurrency" << std::endl;
}
int main()
{
std::thread t(hello);
t.join(); // 沒有這句話,會Debug Error的
return 0;
}
這段代碼很簡單,如果用過boost多線程編程,那麼應該對這個瞭如指掌了。首先包含線程庫頭文件,然後定義一個線程對象t,線程對象負責管理以hello()函數作爲初始函數的線程,join()等待線程函數執行完成——這兒是阻塞的。
這個最簡單的Hello World已經包含了多線程編程的基本結構,至於線程管理、數據共享、線程同步、原子操作,以及一系列進階操作都會在後面詳細闡述。