基於C 11實現的執行緒池

2021-09-24 03:55:34 字數 1622 閱讀 9755

最近在整理之前寫的一些東西,方便以後檢視

實現的主要原理是:乙個同步佇列,外部往同步佇列裡新增任務,然後喚醒執行緒有任務需要處理,執行緒取出任務即可。

同步佇列

syncquene.hpp

#include #include #include templateclass syncquene

bool full()

public:

syncquene(unsigned int maxcount) : m_maxcount(maxcount) {};

void puttask(t && task)

); m_tasklist.push_back(std::forward(task));

m_isnotemptycondition.notify_one();

} t taketask()

); auto task = m_tasklist.front();

m_tasklist.pop_front();

m_isnotfullcondition.notify_one();

return task;

} bool isempty()

bool isfull()

private:

unsigned int m_maxcount;

std::mutex m_mutex;

std::listm_tasklist;

std::condition_variable m_isnotfullcondition;

std::condition_variable m_isnotemptycondition;

};

執行緒池

threadpool.h

#include #include #include #include "syncquene.hpp"

class threadpool

~threadpool();

void puttask(std::function&&pfuntask);

void realase();

private:

void runinthread();

private:

std::list> m_threadlist;

bool m_running = true;

syncquene> m_taskquenu = 1000;

};

threadpool.cpp

#include "stdafx.h"

#include "threadpool.h"

threadpool::threadpool(int count)

}threadpool::~threadpool()

void threadpool::puttask(std::function&& pfuntask)

void threadpool::realase()

} m_threadlist.clear();

}void threadpool::runinthread()

}

基於C 11的執行緒池實現

前端時間偶然在github上看到了乙個非常精煉的 c 11執行緒池實現。作者用不到100行的 實現了乙個簡單的執行緒池,且使用了較多c 11的新特性。於是便想著自己也來動手看看,思路上基本是借鑑原版,但會加入一些自己的想法和嘗試,同時先避免對複雜語法的運用以理解執行緒池為首要目的。由於個人能力有限,...

C 11 執行緒池實現

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

C 11執行緒池的實現

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