C 執行緒池實現

2021-09-30 00:21:29 字數 1296 閱讀 9968

最近在學習stanford的cs149課程,這個課程是有關平行計算的,講了很多很有用的知識,在做程式設計作業的過程中也遇到了很多困難,看了很多資料,我將它們整理出來,以後看也方便一些。

執行緒池的具體實現就是將執行緒提前建立好放入vector等容器中,等到有任務的時候就執行緒就取出任務執行,沒有任務就處於休眠的狀態,所以執行緒池裡頭的執行緒的函式就是乙個死迴圈,當我們關閉執行緒池的時候死迴圈就會退出。執行緒池的函式佇列實現是最麻煩的,因為要考慮到不同的函式引數和返回值型別,但是參考資料裡頭的github裡面有完整的講述,作者寫的很清楚,我就不贅述了。

具體的實現如下:

#include

#include

#include

#include

#include

#include

class

threadpool);

if(stop_ && tasks_.

empty()

) task = std::

move

(tasks_.

front()

);tasks_.

pop();

}task()

;}})

;}}~

threadpool()

cv_.

notify_all()

;for

(auto

& worker : workers_)

}template

<

typename f,

typename..

. args>

auto

submit

(f&& f, args&&..

. args)

-> std::future<

decltype(f

(args...

))>

tasks_.

emplace

([taskptr]()

);} cv_.

notify_one()

;return taskptr-

>

get_future()

;}private

:bool stop_;

std::vector workers_;

std::queuevoid()

>> tasks_;

std::mutex mtx_;

std::condition_variable cv_;

};

參考資料

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

前面已經說到了同步佇列的實現,下面來看執行緒池的實現。ifndef include threadpool define include threadpool include include include include include syncqueue.hpp namespace mythrea...

c 實現執行緒池

執行緒池 簡單地說,執行緒池 就是預先建立好一批執行緒,方便 快速地處理收到的業務。比起傳統的到來乙個任務,即時建立乙個執行緒來處理,節省了執行緒的建立和 的開銷,響應更快,效率更高。在linux中,使用的是posix執行緒庫,首先介紹幾個常用的函式 1 執行緒的建立和取消函式 pthread cr...

C 實現執行緒池

3.thread用法總結 執行緒池的作用 管理乙個任務佇列,乙個執行緒佇列,每次取乙個任務分配有乙個執行緒,迴圈往復。參考 c 簡單執行緒池實現 show the code include pthread mutex t lock pthread mutex initializer pthread ...