基於C 11的執行緒池,指定執行緒執行任務

2021-10-10 06:12:06 字數 1423 閱讀 5914

基於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提供的原子數封裝的自旋鎖 條件變數。兩種組合的區別在於,自旋鎖比較適合當任務比較簡單的時候使用,可以...