C++ 标准库线程池的使用例子
时间: 2024-06-13 17:01:29 浏览: 248
C++ 标准库提供了一个名为std::thread的类,用于创建线程。而线程池则是一种更高级别的线程管理方式,可以避免频繁创建和销毁线程的开销,提高程序的效率。
C++ 标准库并没有提供线程池相关的类,但可以通过一些第三方库实现线程池的功能。其中比较常用的是boost::asio库。
以下是一个使用boost::asio实现的简单线程池示例:
```
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <vector>
#include <thread>
using namespace std;
using namespace boost::asio;
class ThreadPool {
public:
ThreadPool(size_t threadCount) : m_ioService(), m_work(m_ioService) {
for (size_t i = 0; i < threadCount; ++i) {
m_threads.emplace_back([this]() { m_ioService.run(); });
}
}
~ThreadPool() {
m_ioService.stop();
for (auto& thread : m_threads) {
thread.join();
}
}
template <typename F>
void enqueue(F&& f) {
m_ioService.post(f);
}
private:
io_service m_ioService;
io_service::work m_work;
vector<thread> m_threads;
};
int main() {
ThreadPool pool(4);
for (int i = 0; i < 10; ++i) {
pool.enqueue([i]() {
cout << "Task " << i << " executed by thread " << this_thread::get_id() << endl;
});
}
return 0;
}
```
这个示例中,ThreadPool类使用boost::asio库实现,通过构造函数中创建一定数量的线程,并调用io_service::run()来启动它们。enqueue函数用于向线程池中添加任务。在main函数中,我们使用enqueue函数添加了10个任务,每个任务输出一个字符串。可以看到,线程池中的4个线程依次执行了这些任务。
阅读全文