c 執行緒池實現(四)執行緒池實現

2021-10-06 08:44:14 字數 1199 閱讀 2268

前面已經說到了同步佇列的實現,下面來看執行緒池的實現。

#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...