给出一个调用boost库实现线程池的示例
时间: 2023-07-01 10:20:06 浏览: 141
好的,以下是一个使用boost库实现线程池的示例代码:
```c++
#include <iostream>
#include <boost/thread.hpp>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
class ThreadPool
{
public:
ThreadPool(size_t num_threads)
: work_(io_service_)
{
for (size_t i = 0; i < num_threads; ++i)
{
workers_.create_thread(boost::bind(&boost::asio::io_service::run, &io_service_));
}
}
~ThreadPool()
{
io_service_.stop();
workers_.join_all();
}
template <typename Task>
void execute(Task task)
{
io_service_.post(task);
}
private:
boost::asio::io_service io_service_;
boost::asio::io_service::work work_;
boost::thread_group workers_;
};
void task1()
{
std::cout << "Task 1 executed in thread " << boost::this_thread::get_id() << std::endl;
}
void task2()
{
std::cout << "Task 2 executed in thread " << boost::this_thread::get_id() << std::endl;
}
int main()
{
ThreadPool pool(2);
pool.execute(task1);
pool.execute(task2);
return 0;
}
```
在上面的示例中,我们首先定义了一个ThreadPool类,它包含了一个boost::asio::io_service对象和一个boost::thread_group对象。在ThreadPool的构造函数中,我们创建了多个工作线程,并将它们绑定到io_service对象上。execute()函数接受一个任务,并将其提交到io_service队列中。在ThreadPool的析构函数中,我们停止io_service并等待所有工作线程完成。
在main函数中,我们创建了一个ThreadPool对象,并使用execute()函数提交了两个任务任务。每个任务将打印它是在哪个线程中执行的。
请注意,这只是一个简单的示例,实际的线程池可能需要更多的功能。
阅读全文