執行緒池其實就是把任務佇列和工作執行緒綁到一起,提供乙個向任務佇列中新增任務的介面,下面的**為了表達更加清楚沒有分成標頭檔案和原始檔,僅僅是提供思路。
同步機制利用的互斥鎖+條件變數,也可以使用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
執行緒池 一種執行緒的使用模式,執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。而執行緒池維護著多個執行緒,等待著監督管理者分配可併發執行的任務。這避免了在處理短時間任務時建立與銷毀執行緒的代價。執行緒池不僅能夠保證核心的充分利用,還能防止過分排程。可用執行緒數量應該取決於可用的併發處理器...