在循环中使用std::condition_variable
可以实现多线程之间的同步与通信。std::condition_variable
是C++标准库中用于线程同步的一种机制,它配合互斥锁(std::mutex
)一起使用,实现了线程之间的等待与唤醒。
要在循环中使用std::condition_variable
,可以按照以下步骤进行操作:
std::mutex mtx;
std::condition_variable cv;
std::unique_lock<std::mutex> lock(mtx);
std::condition_variable::wait()
来等待条件满足:while (!condition) {
cv.wait(lock);
}
这里的condition
是一个表达式,用于判断条件是否满足。如果条件不满足,则当前线程会进入等待状态,并释放互斥锁,允许其他线程继续执行。
std::condition_variable::notify_one()
或std::condition_variable::notify_all()
来唤醒等待的线程:cv.notify_one(); // 唤醒一个等待线程
// 或
cv.notify_all(); // 唤醒所有等待线程
完整的示例代码如下所示:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool condition = false;
void worker() {
std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟耗时操作
{
std::lock_guard<std::mutex> lock(mtx);
condition = true;
}
cv.notify_one(); // 唤醒等待线程
}
int main() {
std::thread t(worker);
{
std::unique_lock<std::mutex> lock(mtx);
while (!condition) {
cv.wait(lock);
}
}
std::cout << "Condition is satisfied." << std::endl;
t.join();
return 0;
}
上述代码中,worker
函数模拟了一个耗时操作,并在操作完成后将条件condition
设置为true
。在主线程中,通过std::condition_variable
等待条件满足,当条件满足时输出一条信息。
总结一下,使用std::condition_variable
可以在循环中实现线程之间的同步与通信。通过等待条件满足,可以让线程进入等待状态,并在条件满足时唤醒等待的线程。这种机制能够有效地控制线程的执行顺序,实现线程间的协调与同步。
相关腾讯云产品及文档链接:
领取专属 10元无门槛券
手把手带您无忧上云