前面已經說到了同步佇列的實現,下面來看執行緒池的實現。
#ifndef include_threadpool__
#define include_threadpool__
#include
#include
#include
#include
#include
"syncqueue.hpp"
namespace mythreadpool }~
threadpool()
void
addtask
(task&&task)
private
:void
run()}
; sync_queue_.
pop(task)
;task()
;}}void
stop()
);}for
(auto
&thread : threads_)
} threads_.
clear()
;}std::list> threads_;
std::atomic_bool running_;
syncqueue sync_queue_;};
}#endif
// include_threadpool__
可以看到,threadpool構造的時候就預先建立了一些執行緒,執行緒數量預設為cpu核數。執行緒會從同步佇列中取出任務,然後執行。同步隊列為空的話,執行緒將會處於等待狀態。通過addtask介面,上層可以將任務新增到同步佇列中,這個時候就喚醒等待獲取任務的佇列。
下面是乙個sample:
#include
"syncqueue.hpp"
#include
"threadpool.hpp"
#include
#include
void
task1()
void
task2()
void
task3()
intmain()
其實這裡新增的任務還是比較簡單的,實際的情況會複雜一些,例如要求任務會有輸出值,還會有返回值,這樣目前確實不滿足。但是我們可以稍微修改一下addtask函式,結合std::future,在任務結束後獲取返回值。 C 基礎 多執行緒筆記 四 執行緒池
現在到了關於多線最簡單使用的最後一篇筆記。無論從什麼角度來看,每一項事物都應該有其所在的空間,而對於執行緒來說,執行緒池就是它所存在的空間,或者叫容器了。接下來,看看這個執行緒池是如何使用的吧!概念 manualresetevent,通知乙個或多個正在等待的執行緒已發生事件 manualresete...
C 基礎 多執行緒筆記 四 執行緒池
現在到了關於多線最簡單使用的最後一篇筆記。無論從什麼角度來看,每一項事物都應該有其所在的空間,而對於執行緒來說,執行緒池就是它所存在的空間,或者叫容器了。接下來,看看這個執行緒池是如何使用的吧!概念 manualresetevent,通知乙個或多個正在等待的執行緒已發生事件 manualresete...
c 實現執行緒池
執行緒池 簡單地說,執行緒池 就是預先建立好一批執行緒,方便 快速地處理收到的業務。比起傳統的到來乙個任務,即時建立乙個執行緒來處理,節省了執行緒的建立和 的開銷,響應更快,效率更高。在linux中,使用的是posix執行緒庫,首先介紹幾個常用的函式 1 執行緒的建立和取消函式 pthread cr...