開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
g++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
std:thread
c++11
問題(Question):
最近在寫一個關於threadpool的作業
我是參考這個人的作法
https://github.com/mbrossard/threadpool/blob/master/src/threadpool.c
不過我是用std:thread, not pthread
我設計的方式就如下:
建立一個class threadpool
在constructor裡面spawn n個thread
然後讓這n個thread去執行一個infinite loop
loop裡要做的事情就是檢查task_queue裡面是否有未完成的工作
若有就把工作完成
若無就繼續在while loop spin
我想最普遍的用法
就是先create一個task object(包含function pointer跟parameter)
然後把task放到task_queue裡面
thread就會去拿這個task然後執行function
不過這個作業比這複雜很多
我要執行的function F是在一個大的class A裡面的public function
所以直觀的作法當然是把function F包成一個task放到threadpool的task_queue裡面
可是function F用了很多private variable, private class, private function
而且class threadpool不能寫在class A底下
要額外寫在threadpool.h
所以事情就變得很複雜
因為我沒辦法把要用到的其他function或是variable等等pass給threadpool裡面的thread
想請問該怎麼設計會比較好呢?
我一直很苦惱的點是
threadpool.h裡面的class threadpool要怎樣才看得到class A裡面全部的東西?
有辦法做到這件事情嗎?
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):