C 11執行緒池的實現

2021-08-02 03:29:37 字數 976 閱讀 7212

執行緒池是指定執行緒建立的個數,每個執行緒只是建立銷毀一次。比起毫無限制的建立執行緒銷毀執行緒效率更高。畢竟頻繁的建立銷毀執行緒會消耗系統資源,而且系統建立執行緒也是有上限的。

class thread_pool

;

thread_pool::thread_pool(int n):done(false)

else

}}); }}

//1 notify_all非常重要,每個任務都notify_one,最終condition_variable.wait會被阻塞。使用notify_all

// 所有的程序都會出發一次wait,故而跳出阻塞,結束執行緒

thread_pool::~thread_pool()

}void thread_pool::submit(functionf)

使用 int main()

{ thread_pool tp(20);

for(int i=0;i<20;i++)

{ tp.submit([i](){

this_thread::sleep_for(std::chrono::seconds(1));

cout<

condition_variable:

是c++11多執行緒程式設計中提供的一種同步的機制。成員函式notify_one會通知乙個等待執行緒,而成員函式notify_all會通知所有的等待執行緒。成員函式wait需要傳遞兩個引數,乙個鎖乙個函式指標。wait()會去檢查函式的返回值。如果條件不滿足(函式返回false),wait()函式會解鎖互斥量,而且將這個執行緒置於阻塞或等待狀態。當準備資料的執行緒呼叫notify_one()通知條件變數時,處理資料的執行緒從睡眠狀態中甦醒,重新獲得互斥鎖,並且對條件再次判斷,如果條件滿足,從wait()返回並繼續持有鎖。如果條件不滿足時,執行緒將對傳入進來的互斥量解鎖,並且重新開始等待。

C 11 執行緒池實現

c 11中已經新增了跨平台的thread相關工具,在一些輕量級使用場景中,使用std thread無疑會給我們帶來很多方便。這裡使用它實現了乙個簡單的執行緒池 easythreadpool.h ifndef easy thread pool h define easy thread pool h i...

C 11執行緒池

執行緒池其實就是把任務佇列和工作執行緒綁到一起,提供乙個向任務佇列中新增任務的介面,下面的 為了表達更加清楚沒有分成標頭檔案和原始檔,僅僅是提供思路。同步機制利用的互斥鎖 條件變數,也可以使用c 11提供的原子數封裝的自旋鎖 條件變數。兩種組合的區別在於,自旋鎖比較適合當任務比較簡單的時候使用,可以...

C 11 執行緒池

根據提出的思路略有改動 已測試 pragma once include include include include include include include include include include include 執行緒池 class threadpool if this task...