C 11執行緒池

2021-09-16 20:51:37 字數 1027 閱讀 8054

執行緒池其實就是把任務佇列和工作執行緒綁到一起,提供乙個向任務佇列中新增任務的介面,下面的**為了表達更加清楚沒有分成標頭檔案和原始檔,僅僅是提供思路。

同步機制利用的互斥鎖+條件變數,也可以使用c++11提供的原子數封裝的自旋鎖+條件變數。兩種組合的區別在於,自旋鎖比較適合當任務比較簡單的時候使用,可以減少陷入核心的次數,但當任務比較複雜,執行緒需要較長時間等待的時候,自旋鎖會把大量時間浪費在忙等待上,此時用互斥鎖比較好。

#include#include#include#include#include#includeusing namespace std;

class threadpool

//用的c++11封裝好的執行緒類,鎖,條件變數

~threadpool()

void stop() //停止,其實沒啥用,沒指望執行緒池能正常退出

for(auto& thr:threads_)

thr->join();

} void start() //啟動工作佇列 }

void run(task task) //外界向任務佇列新增任務的介面

void runinthread() //工作執行緒的任務就是從任務佇列中取任務,執行,沒有任務就阻塞在take中 }

task take() //從任務佇列中取任務

); task task;

if(!queue_.empty())

}mutable mutex mutex_;

condition_variable notempty_; //本執行緒池設定了最大任務數量,所以用了兩個條件變數

condition_variable notfull_;

vector> threads_; //執行緒實體

queuequeue_; //任務佇列

size_t maxqueuesize_;

size_t maxthreads_;

bool running_;

};

C 11 執行緒池

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

C 11 執行緒池實現

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

C 11 執行緒池demo

執行緒池 一種執行緒的使用模式,執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。而執行緒池維護著多個執行緒,等待著監督管理者分配可併發執行的任務。這避免了在處理短時間任務時建立與銷毀執行緒的代價。執行緒池不僅能夠保證核心的充分利用,還能防止過分排程。可用執行緒數量應該取決於可用的併發處理器...