c++ 条件变量的用法举例 ,使用Std:thread
时间: 2023-05-23 22:05:31 浏览: 129
条件变量是一种多线程编程中的同步机制,可以让线程等待某个条件的满足而不需要一直占用CPU资源。条件变量通常是与互斥锁配合使用,以保证线程安全。
以下是使用条件变量和std::thread的例子:
```C++
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool flag = false;
void worker_thread() {
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []{return flag;}); // 等待flag变为true
std::cout << "Worker thread is working" << std::endl;
}
int main() {
std::thread t(worker_thread);
// 延迟一会儿,然后改变flag的值
std::this_thread::sleep_for(std::chrono::seconds(2));
{
std::lock_guard<std::mutex> lck(mtx);
flag = true;
}
cv.notify_one(); // 唤醒等待线程
t.join();
return 0;
}
```
上述代码中,线程t在等待flag变为true时调用了条件变量的wait()方法。当flag变为true时,主线程通过调用条件变量的notify_one()方法唤醒了线程t,线程t继续执行。
注意,在使用条件变量时需要使用std::unique_lock而不是std::lock_guard来构造锁,因为wait()方法需要在持有锁的情况下进行调用。同时,wait()方法应该在while循环内使用,以避免错误地唤醒线程。
阅读全文