C 11 中的线程池
简介
线程池是一种管理线程池的技术可以动态分配任务的线程集。与在每个任务上创建和销毁线程相比,它具有多种优势,包括提高性能和资源效率。
了解线程池
在 C 11 中,线程池通常是使用线程、互斥体和条件变量的组合来实现。线程在后台创建并启动,任务被添加到队列中。工作人员不断监视队列,等待新任务可用。一旦任务可用,worker 将检索并执行它。
创建线程池
要创建线程池,我们可以定义一个 ThreadPool 类:
class ThreadPool { public: void Start(); void QueueJob(const std::function<void()>& job); void Stop(); bool busy(); private: void ThreadLoop(); bool should_terminate = false; std::mutex queue_mutex; std::condition_variable mutex_condition; std::vector<std::thread> threads; std::queue<std::function<void()>> jobs; };
管理主题Pool
工作线程循环
每个工作线程运行一个无限循环来等待和执行任务:
void ThreadPool::ThreadLoop() { while (true) { std::function<void()> job; { std::unique_lock<std::mutex> lock(queue_mutex); mutex_condition.wait(lock, [this] { return !jobs.empty() || should_terminate; }); if (should_terminate) { return; } job = jobs.front(); jobs.pop(); } job(); } }
使用线程池
使用线程线程池,只需创建一个实例并调用 QueueJob 来添加任务:
ThreadPool thread_pool; thread_pool.Start(); thread_pool.QueueJob([] { /* ... */ });
线程池的优点
以上是C 11 中的线程池如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!