基於c++11的執行緒池,如果執行緒與任務無關,比較好實現,但是!opengl這種任務需要繪製上下文,就是需要指定執行緒執行任務。
thread_pool.hpp
#ifndef _thread_pool_h_
#define _thread_pool_h_
#include #include #include #include #include #include #include #include class threadpool
~threadpool()
void start()
std::vectorgetthreadids()
void stop()
// terminate every thread job
for (std::thread& t : threads_)
thread_ids_.clear();
threads_.clear(); }
}private:
void work()
else if (is_running_ && tasks_.empty())
if (task)
cond_.wait(lk);
}} }
public:
// disable copy and assign construct
threadpool(const threadpool&) = delete;
threadpool& operator=(const threadpool& other) = delete;
private:
std::atomic_bool is_running_; // thread pool manager status
std::mutex mtx_;
std::condition_variable cond_;
int thread_num_;
std::vectorthreads_;
std::vectorthread_ids_;
std::queuetasks_;
};#endif // !_thread_pool_h_
//啟動執行緒池
thread_pool_ = shared_ptr(new threadpool(20));;
thread_pool_->start();
...//新增任務
...//callback
bool worker::consumerfunction(message msg, uint64_t thread_id)
//do real job
std::cout << "do real job \n";
}
任務和執行緒的匹配關係,需要另外維護 基於C 11實現的執行緒池
最近在整理之前寫的一些東西,方便以後檢視 實現的主要原理是 乙個同步佇列,外部往同步佇列裡新增任務,然後喚醒執行緒有任務需要處理,執行緒取出任務即可。同步佇列 syncquene.hpp include include include templateclass syncquene bool ful...
基於C 11的執行緒池實現
前端時間偶然在github上看到了乙個非常精煉的 c 11執行緒池實現。作者用不到100行的 實現了乙個簡單的執行緒池,且使用了較多c 11的新特性。於是便想著自己也來動手看看,思路上基本是借鑑原版,但會加入一些自己的想法和嘗試,同時先避免對複雜語法的運用以理解執行緒池為首要目的。由於個人能力有限,...
C 11執行緒池
執行緒池其實就是把任務佇列和工作執行緒綁到一起,提供乙個向任務佇列中新增任務的介面,下面的 為了表達更加清楚沒有分成標頭檔案和原始檔,僅僅是提供思路。同步機制利用的互斥鎖 條件變數,也可以使用c 11提供的原子數封裝的自旋鎖 條件變數。兩種組合的區別在於,自旋鎖比較適合當任務比較簡單的時候使用,可以...