c++的boost怎么使用线程池
时间: 2023-07-01 10:15:19 浏览: 182
使用 Boost 实现线程池需要以下步骤:
1.包含 Boost 的头文件:
```c++
#include <boost/thread.hpp>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
```
2.定义线程池类:
```c++
class ThreadPool
{
public:
ThreadPool(size_t threads);
template<class F>
void enqueue(F f);
~ThreadPool();
private:
std::vector<boost::thread> workers;
boost::asio::io_service service;
boost::asio::io_service::work work;
boost::mutex mutex;
boost::condition_variable condition;
};
```
3.实现线程池类:
```c++
ThreadPool::ThreadPool(size_t threads)
:work(service), work(boost::asio::io_service::work(service))
{
for (size_t i = 0; i < threads; ++i)
{
workers.push_back(boost::thread(
boost::bind(&boost::asio::io_service::run, &service)));
}
}
ThreadPool::~ThreadPool()
{
work.reset();
service.stop();
for (size_t i = 0; i < workers.size(); ++i)
{
workers[i].join();
}
}
template<class F>
void ThreadPool::enqueue(F f)
{
boost::unique_lock<boost::mutex> lock(mutex);
service.post(f);
condition.notify_one();
}
```
4.使用线程池执行任务:
```c++
void task(int i)
{
std::cout << "Task " << i << " is running." << std::endl;
}
int main()
{
ThreadPool pool(4);
for (int i = 0; i < 8; ++i)
{
pool.enqueue(boost::bind(task, i));
}
return 0;
}
```
这里的 `ThreadPool` 类中,`workers` 存储了线程池中的工作线程,`service` 是 Boost 的 `io_service` 类型,用于管理任务队列和分发任务给工作线程,`work` 是 Boost 的 `io_service::work` 类型,用于防止 `io_service` 运行结束,从而保持线程池一直运行。`enqueue` 函数用于将任务加入任务队列,`task` 函数就是一个简单的任务函数,最后在 `main` 函数中使用线程池执行任务。
希望这个示例可以帮到您。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)