c++11中已經新增了跨平台的thread相關工具,在一些輕量級使用場景中,使用std::thread無疑會給我們帶來很多方便。這裡使用它實現了乙個簡單的執行緒池:
easythreadpool.h
#ifndef _easy_thread_pool_h_
#define _easy_thread_pool_h_
#include #include #include #include #include #include #include class easythreadpool
;#endif // _easy_thread_pool_h_
easythreadpool.cpp
#include "easythreadpool.h"
#include easythreadpool::easythreadpool(size_t numthreads) : _isdone(false), _taskempty(true)
}catch (...)
}easythreadpool::~easythreadpool()
}}void easythreadpool::posttask(const task &task)
else
);_tasks.push(task);
_taskempty.store(false);
//喚醒乙個執行緒去執行
_cv.notify_one();
}}void easythreadpool::runthreadworker()
else
}}bool easythreadpool::gettask(task &task)
); if (!_tasks.empty())
return false;
}
測試例項
// test.cpp
#include "easythreadpool.h"
#include void printinfo()
int main()
return 0;
}
在linux下使用g++編譯:
g++ test.cpp easythreadpool.h easythreadpool.cpp -o test --std=c++11 -lpthread
執行緒池的實現無非就是生產者-消費者模型。使用c++11實現執行緒池的好處顯而易見,相比c,它非常簡潔,只有100余行**就可以搞定。不過它涉及到的鎖等執行緒同步的知識任然很有代表性。 C 11執行緒池
執行緒池其實就是把任務佇列和工作執行緒綁到一起,提供乙個向任務佇列中新增任務的介面,下面的 為了表達更加清楚沒有分成標頭檔案和原始檔,僅僅是提供思路。同步機制利用的互斥鎖 條件變數,也可以使用c 11提供的原子數封裝的自旋鎖 條件變數。兩種組合的區別在於,自旋鎖比較適合當任務比較簡單的時候使用,可以...
C 11 執行緒池
根據提出的思路略有改動 已測試 pragma once include include include include include include include include include include include 執行緒池 class threadpool if this task...
C 11執行緒池的實現
執行緒池是指定執行緒建立的個數,每個執行緒只是建立銷毀一次。比起毫無限制的建立執行緒銷毀執行緒效率更高。畢竟頻繁的建立銷毀執行緒會消耗系統資源,而且系統建立執行緒也是有上限的。class thread pool thread pool thread pool int n done false els...