线程池

class ThreadPool {
public:
    ThreadPool(size_t size) {
        for (size_t i = 0; i < size; i++) {
            _workers.emplace_back(&ThreadPool::workerThread, this);
        }
    }
    ~ThreadPool() {
        _bstop = true;
        for (auto& worker : _workers) {
            worker.join();
        }
        _condition.notify_all();
    }
    void enqueue(std::function<void()> task){
        {
            std::lock_guard<std::mutex> lock(_mutex);
            _tasks.push(task);
        }
        _condition.notify_one();
    }
    void workerThread() {
        while (true) {
            std::function<void()> task;
            {
                std::unique_lock<std::mutex> lock(_mutex);
                _condition.wait(lock, [this]() {
                    return _bstop || !_tasks.empty();
                    });
                if (_bstop) return;
                task = _tasks.front();
                _tasks.pop();
            }
            task();
            std::cout << "finish task" << std::endl;
        }
    }
private:
    std::mutex _mutex;
    std::condition_variable _condition;
    std::vector<std::thread> _workers;
    std::queue<std::function<void()>> _tasks;
    std::atomic<bool> _bstop;
};