C++ 条件变量 多线程
时间: 2023-09-15 11:22:51 浏览: 46
好的,你想了解关于 C++ 条件变量在多线程中的使用。
在多线程中,条件变量通常用于线程间的同步,它可以让一个线程等待另一个线程的特定事件发生。当这个特定事件发生时,另一个线程可以通过条件变量来通知等待的线程,让它继续执行。
C++ 中的条件变量一般需要和互斥锁一起使用,以保证线程安全。当一个线程等待条件变量时,它会释放互斥锁,让其他线程可以继续执行,等到条件变量被唤醒后,线程会重新获得互斥锁并继续执行。
下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker_thread()
{
// do some work
{
std::lock_guard<std::mutex> lk(mtx);
ready = true;
}
cv.notify_one(); // 通知等待的线程
}
int main()
{
std::thread worker(worker_thread);
// 等待条件变量
{
std::unique_lock<std::mutex> lk(mtx);
cv.wait(lk, []{ return ready; }); // 等待条件变量被唤醒
}
std::cout << "Worker thread finished\n";
worker.join();
return 0;
}
```
在这个示例中,我们新开了一个线程 `worker_thread`,它会在一段时间后设置条件变量 `ready` 为 `true`,然后通知等待的线程。在 `main` 函数中,我们首先获得了互斥锁 `mtx`,然后调用 `cv.wait` 等待条件变量被唤醒。在等待期间,线程会释放互斥锁,让 `worker_thread` 可以继续执行。等到 `worker_thread` 设置了条件变量并通知后,`main` 函数会重新获得互斥锁并继续执行。最后,我们等待 `worker_thread` 结束并回收资源。
希望这个示例可以帮助你理解条件变量在多线程中的使用。