在我们之前的文章中,我们已经介绍了C++多线程编程的基础知识,包括如何创建线程,如何使用互斥量进行同步,以及如何使用条件变量进行线程间通信。在这篇文章中,我们将深入探讨一些更高级的主题,包括线程池,future和promise,以及atomic操作。
一、线程池
线程池是一种创建和管理线程的技术,它预先创建一定数量的线程,并根据需要将任务分配给这些线程。线程池可以减少线程创建和销毁的开销,提高系统的响应速度。
C++标准库并没有提供线程池,但我们可以使用`std::thread`和`std::queue`来自己实现一个简单的线程池:
```cpp
#include <vector>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
class ThreadPool {
public:
ThreadPool(size_t num_threads) {
for (size_t i = 0; i < num_threads; ++i) {
workers.emplace_back([this] {
for (;;) {
std::function<void()> task;
{