项目使用C 11编写,只有一个头文件,但是在github上却获得了7600个stars和2200个fork。非常值得大家下载下来学习,尤其是想要学习多线程编码的同学。
代码相当简明,所有的代码都在 一个类中实现,对外暴露的也仅仅是一个构造函数、一个析构函数以及一个模板函数。具体如下:
代码语言:javascript复制class ThreadPool {
public:
ThreadPool(size_t);
template<class F, class... Args>
auto enqueue(F&& f, Args&&... args)
-> std::future<typename std::result_of<F(Args...)>::type>;
~ThreadPool();
private:
// need to keep track of threads so we can join them
std::vector< std::thread > workers;
// the task queue
std::queue< std::function<void()> > tasks;
// synchronization
std::mutex queue_mutex;
std::condition_variable condition;
bool stop;
};
使用起来也相对简单.即使是刚入门也可以轻松使用,使用案例参考如下代码:
代码语言:javascript复制int main()
{
ThreadPool pool(4);
std::vector< std::future<int> > results;
for(int i = 0; i < 8; i) {
results.emplace_back(
pool.enqueue([i] {
std::cout << "hello " << i << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "world " << i << std::endl;
return i*i;
})
);
}
for(auto && result: results)
std::cout << result.get() << ' ';
std::cout << std::endl;
return 0;
}