线程重新置于等待状态,C++使用条件变量使多线程重新处于等待状态,用代码举例说明
时间: 2024-11-27 08:13:04 浏览: 15
在C++中,使用条件变量实现线程重新等待的关键在于`std::condition_variable`配合`std::mutex`。下面是一个简单的示例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
// 共享资源
int shared_resource = 0;
std::mutex mtx; // 互斥锁
std::condition_variable cv; // 条件变量
void waiter() {
std::unique_lock<std::mutex> lock(mtx);
while (shared_resource != 5) { // 模拟条件不满足
std::cout << "Thread waiter sleeping...\n";
cv.wait(lock); // 线程进入等待状态
}
std::cout << "Thread waiter woke up and resource is ready.\n";
}
void changer() {
std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟延迟更新
std::lock_guard<std::mutex> lock(mtx);
shared_resource = 5;
cv.notify_one(); // 唤醒一个等待的线程
}
int main() {
std::thread t_wait(waiter);
std::thread t_change(changer);
t_wait.join();
t_change.join();
return 0;
}
```
在这个例子中,`changer`线程先等待两秒,然后改变共享资源的值,之后通过`cv.notify_one()`唤醒一个正在等待的`waiter`线程。当`waiter`线程从`cv.wait(lock)`返回时,它会检查条件是否满足,如果满足,则继续执行后续操作。
阅读全文