c++ 11的条件变量多线程
时间: 2024-09-26 14:09:27 浏览: 28
在 C++11 中,引入了 `<thread>` 和 `<mutex>` 标准库,它们支持高级的并发编程,其中包括条件变量(`std::condition_variable`)。条件变量是一种同步机制,它允许线程在满足特定条件(如数据可用或某个操作完成)时等待,并在该条件变为真时唤醒等待的线程。
条件变量通常与互斥量(`std::mutex`)一起使用,互斥量用于保护共享资源不被并发访问。以下是使用条件变量的基本步骤:
1. 创建互斥量和条件变量:
```cpp
std::mutex mtx;
std::condition_variable cv;
```
2. 线程启动时,获取互斥量并检查条件,如果没有满足,就调用 `cv.wait(mtx)` 让线程进入等待状态。
```cpp
std::unique_lock<std::mutex> lock(mtx);
if (dataReady) {
// 数据已准备,处理业务逻辑
} else {
cv.wait(lock); // 等待条件变为 true
}
```
3. 当条件满足时,在其他线程中通过 `cv.notify_one()` 或 `cv.notify_all()` 来唤醒等待的线程。
```cpp
// 在另一个线程中,数据准备好后通知等待线程
lock.unlock(); // 先释放互斥量
cv.notify_one(); // 唤醒一个等待的线程
```
4. 等待线程会立即尝试重新获取互斥量并检查条件。
阅读全文