那么怎么使用C++实现线程池的同步任务
时间: 2023-07-11 14:48:53 浏览: 57
在C++中,可以使用标准库提供的`std::thread`和`std::mutex`等多线程工具,结合队列来实现线程池的同步任务。具体实现步骤如下:
1. 定义一个任务队列,用来存储待执行的任务。
```
std::queue<std::function<void()>> tasks;
```
2. 定义一个线程池类,包含一个线程数组和一个任务队列。在构造函数中创建线程,并将它们加入到线程数组中。
```
class ThreadPool {
public:
ThreadPool(int num_threads) {
for (int i = 0; i < num_threads; ++i) {
threads_.emplace_back([this]() {
while (true) {
std::function<void()> task;
{
std::unique_lock<std::mutex> lock(mutex_);
condition_.wait(lock, [this]() { return !tasks_.empty(); });
task = std::move(tasks_.front());
tasks_.pop();
}
task();
}
});
}
}
...
private:
std::vector<std::thread> threads_;
std::queue<std::function<void()>> tasks_;
std::mutex mutex_;
std::condition_variable condition_;
};
```
3. 定义一个添加任务的函数,将需要执行的任务加入到任务队列中,同时通知等待的线程开始执行任务。
```
void ThreadPool::addTask(std::function<void()> task) {
{
std::unique_lock<std::mutex> lock(mutex_);
tasks_.emplace(std::move(task));
}
condition_.notify_one();
}
```
4. 在主函数中创建线程池实例,然后向任务队列中添加需要执行的任务。
```
ThreadPool pool(4);
pool.addTask([]() {
// TODO: 添加需要执行的任务
});
```
这样就可以使用C++实现线程池的同步任务了。需要注意的是,在使用线程池时,需要处理好线程同步和互斥等问题,避免出现多线程竞争的情况。