工作中需要用到多執行緒,就簡單實現了乙個簡易的執行緒池,直接上**記錄一下
#ifndef threadpool_h
#define threadpool_h
#include
#include
#include
#include
#include
#include
class
threadpool
;#endif
// threadpool_h
cpp
#include
"threadpool.h"
threadpool::
threadpool
(int threadcount)
threadpool::
~threadpool()
void threadpool::
start()
}void threadpool::
addtask
(const task& ta)
std::unique_lock
lck(m_mutex)
; taskqueue.
push
(ta)
; cond.
notify_one()
;}void threadpool::
stop()
for(
int i =
0; i < m_threadcount;
++i)
threads.
clear()
;}//跑任務的流程,如果有任務,就啟動乙個執行緒去跑,跑完了後檢測有沒有任務 有任務繼續跑,沒任務就等待
void threadpool::
runtask()
}}threadpool::task threadpool::
taketask()
task ta;if(
!taskqueue.
empty()
)return ta;
}
上述實現,可以建立乙個固定執行緒數的執行緒池,並且當所有任務完成後才會退出。
參考1:
參考2:
實現乙個簡易的執行緒池。
定義四個類 乙個內部類 乙個任務類 乙個測試類 乙個執行緒池類包含乙個內部類。任務類 任務類,檢查埠。author administrator public class scannertask public void starttask catch unknownhostexception e ca...
實現乙個執行緒池
一.執行緒最主要的三個同步機制 1.訊號量 2.互斥鎖 3.條件變數 二.對三個同步機制分別實現乙個包裝類 ifdef locker h define locker h include include 訊號量的封裝 class sem sem bool wait bool post private ...
執行緒池(一) 實現乙個簡單的執行緒池
我們知道頻繁的建立 銷毀執行緒是不可取的,為了減少建立和銷毀執行緒的次數,讓每個執行緒可以多次使用,我們就可以使用執行緒池,可以降低資源到的消耗。執行緒池裡面肯定有多個執行緒,那麼我們就簡單的用乙個陣列來儲存執行緒,那我們我們預設裡面有 5 個執行緒。那我們執行緒池裡只有五個執行緒能同時工作,那同時...