c++线程池运行三个任务示例代码
时间: 2024-09-09 11:13:08 浏览: 63
在 C++ 中,使用线程池可以有效地管理并发任务,减少创建和销毁线程的开销。这里是一个简单的示例,展示如何使用 `std::thread_pool`(如果你是在 C++17 或之后的版本,并使用了 `<execution>` 标准库的话)来运行三个任务:
```cpp
#include <iostream>
#include <future>
#include <vector>
#include <execution>
// 假设我们有一个耗时的任务函数
void do_something(int n) {
std::cout << "Running task with input: " << n << std::endl;
// 这里只是一个简单的延迟,实际任务会更复杂
std::this_thread::sleep_for(std::chrono::seconds(2));
}
int main() {
// 创建一个线程池
auto pool = std::ThreadPool(4); // 这里设置线程池大小为4,可以根据实际情况调整
// 准备三个任务
std::vector<std::packaged_task<void(int)>> tasks{
std::packaged_task<void(int)>(do_something),
std::packaged_task<void(int)>(do_something),
std::packaged_task<void(int)>(do_something)
};
// 提交任务到线程池
for (auto& task : tasks) {
pool.submit(task);
}
// 等待所有任务完成
pool.join();
return 0;
}
```
在这个例子中,`do_something` 函数会被提交到线程池执行,而线程池会自动分配空闲的线程来执行这些任务。注意,`submit` 方法不会立即启动任务,而是添加到队列中等待处理。
阅读全文