手写一个线程池

发布时间 2023-03-29 01:07:47作者: woodx

来源<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;
}