来源<c++并发实战> 手写一个简单的线程池
有待改进
#include <iostream> #include <thread> #include <mutex> #include <unistd.h> #include <queue> #include <chrono> #include <condition_variable> #include <future> using namespace std; queue<packaged_task<void()>> tasks; mutex mut; void doTask() { while (1) { packaged_task<void()> task; { lock_guard<mutex> lk(mut); if (tasks.empty()) { continue; } task = move(tasks.front()); tasks.pop(); } task(); sleep(1); } } template<typename Func> future<void> put_task(Func f) { packaged_task<void()> task(f); future<void> res = task.get_future(); lock_guard<mutex> lk(mut); tasks.push(move(task)); return res; } int num = 0; void print() { cout << num++ << endl; } int main() { int sizeOfThreadPool = 10; for (int i = 0; i < sizeOfThreadPool; ++i) { thread t1(doTask); t1.detach(); } while (1) { put_task<void()>(print); } return 0; }