最近在整理之前寫的一些東西,方便以後檢視
實現的主要原理是:乙個同步佇列,外部往同步佇列裡新增任務,然後喚醒執行緒有任務需要處理,執行緒取出任務即可。
同步佇列
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...