C++ 线程池 传递任务 enqueue
时间: 2024-09-07 15:04:17 浏览: 72
c++线程池经典实现方式demo
5星 · 资源好评率100%
在C++中,线程池是一种常见的并发工具,用于管理和调度一组预创建的线程,以便高效地处理大量小任务。线程池通过提供一个队列(enqueue操作)将任务添加到线程组,而不是每次需要新线程就立即创建。当线程空闲时,它会从队列中取出任务并执行。
`enqueue`操作通常是一个模板函数,接受一个函数指针或Lambda表达式以及任何必要的参数,作为待执行的任务。例如,在C++11引入的`std::thread_pool`库(实际库可能会有所不同)中,enqueue可能看起来像这样:
```cpp
#include <ThreadPool>
using namespace std::this_thread;
// 创建一个线程池
ThreadPool pool(4); // 4个线程
// 定义一个函数或Lambda来表示任务
void worker_function(int task_id) {
// 任务的具体实现
}
// 使用enqueue提交任务
pool.enqueue(worker_function, 0); // 将0作为参数传递给worker_function
```
线程池的优点包括资源利用率高、避免频繁创建销毁线程导致的开销、易于管理等。然而,如果任务大小超过了线程的数量或者耗时过长,可能导致任务阻塞整个线程池,这时就需要考虑任务拆分或者优化线程池配置。
阅读全文