C 11 執行緒池實現

2021-08-17 14:32:39 字數 1298 閱讀 3865

c++11中已經新增了跨平台的thread相關工具,在一些輕量級使用場景中,使用std::thread無疑會給我們帶來很多方便。這裡使用它實現了乙個簡單的執行緒池:

easythreadpool.h

#ifndef _easy_thread_pool_h_

#define _easy_thread_pool_h_

#include #include #include #include #include #include #include class easythreadpool

;#endif // _easy_thread_pool_h_

easythreadpool.cpp

#include "easythreadpool.h"

#include easythreadpool::easythreadpool(size_t numthreads) : _isdone(false), _taskempty(true)

}catch (...)

}easythreadpool::~easythreadpool()

}}void easythreadpool::posttask(const task &task)

else

);_tasks.push(task);

_taskempty.store(false);

//喚醒乙個執行緒去執行

_cv.notify_one();

}}void easythreadpool::runthreadworker()

else

}}bool easythreadpool::gettask(task &task)

); if (!_tasks.empty())

return false;

}

測試例項

// test.cpp

#include "easythreadpool.h"

#include void printinfo()

int main()

return 0;

}

在linux下使用g++編譯:

g++ test.cpp easythreadpool.h easythreadpool.cpp -o test --std=c++11 -lpthread
執行緒池的實現無非就是生產者-消費者模型。使用c++11實現執行緒池的好處顯而易見,相比c,它非常簡潔,只有100余行**就可以搞定。不過它涉及到的鎖等執行緒同步的知識任然很有代表性。

C 11執行緒池

執行緒池其實就是把任務佇列和工作執行緒綁到一起,提供乙個向任務佇列中新增任務的介面,下面的 為了表達更加清楚沒有分成標頭檔案和原始檔,僅僅是提供思路。同步機制利用的互斥鎖 條件變數,也可以使用c 11提供的原子數封裝的自旋鎖 條件變數。兩種組合的區別在於,自旋鎖比較適合當任務比較簡單的時候使用,可以...

C 11 執行緒池

根據提出的思路略有改動 已測試 pragma once include include include include include include include include include include include 執行緒池 class threadpool if this task...

C 11執行緒池的實現

執行緒池是指定執行緒建立的個數,每個執行緒只是建立銷毀一次。比起毫無限制的建立執行緒銷毀執行緒效率更高。畢竟頻繁的建立銷毀執行緒會消耗系統資源,而且系統建立執行緒也是有上限的。class thread pool thread pool thread pool int n done false els...