C++11多線程編程(一)——初始多線程

首先仍是那個問題,咱們爲何須要多線程?單線程編程作的好好的,又簡單又好用,爲何要弄出一個多線程編程呢?難道前人是爲了設計而設計了個多線程的?顯然這是不可能,那麼是什麼緣由呢?用最精煉的語言歸納無非就是如下兩個緣由。ios

效率和用戶體驗編程

效率主要體如今服務端,用戶體驗更可能是體如今客戶端,固然確定不是說效率只體如今服務端,用戶體驗只體如今客戶端,不管是效率仍是用戶體驗在服務端和客戶端上都會體現,只是說側重點不同,這一點你們要注意下。多線程

那麼多線程究竟是什麼呢?在計算機術語中也能夠叫併發,指的是在單個系統裏同時執行多個獨立的活動,而不是順序的一個接一個的執行。假設這樣的一個場景,你在一個軟件中要導入100萬條的數據,若是你用單線程,那麼你在導入的過程當中,你只能等待它導完,其餘什麼事你都作不了,由於軟件會卡在那裏,之因此卡在那裏,是由於軟件裏面在傳輸數據,而你是用單線程,數據還沒傳輸完,下面的代碼沒法執行。因此這個時候你必須用多線程,開啓一個線程來導入這100萬條數據,這樣才能保證在導入數據的同時,你還能夠在軟件上作其餘操做。併發

你們要注意一點,在單核CPU上面,併發並非真正的併發,而是經過時間片輪詢的方式來看起來像是併發,真正的併發應該是在多核CPU上面。app

說完了多線程的相關概念,咱們來講一說多線程編程。在早期C++11以前,C++在語言級別上並不支持多線程,要想實現多線程,必須經過第三方庫或者調用平臺系統函數來實現的,而不一樣平臺的多線程的系統函數又都不同,因此給多線程編程帶來了不少麻煩。可是從C++11開始,C++終於開始在語言級別上支持多線程,咱們也終於能夠用一份代碼在多個平臺上跑了。ide

那麼C++如何實現線程呢?如下是一個實現線程的簡單的例子函數

#include <iostream>
#include <thread>
using namespace std;
void thread_task()
{
    cout << "hello thread" << endl;
}
 
int main()
{
    thread t(thread_task);
    t.join();
    cout << "thread end" << endl;
    return 0;
}

thread t(thread_task)這個是打開C++多線程世界的一個最簡單也是最基礎的一行代碼,今後C++開始從語言級別上支持了多線程。學習

以上是一個很是簡單的C++多線程的例子,main函數是主線程,thread_task是子線程,thread t(thread_task)意思是啓動這個子線程,join()會使主線程會被阻塞,直到子線程執行完畢,而後才退程序。spa

因此從這個例子你們能夠看出C++多線程寫法是多麼的簡潔,讓人充滿的學習的慾望。線程

更多精彩內容,請關注同名公衆:一點筆記alittle

gzh_alittle.jpg

相關文章
相關標籤/搜索