以下是一个示例,演示了如何在 C++ 中使用条件变量 (std::condition_variable) 实现线程之间的同步:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
// 共享资源
int sharedData = 0;
// 互斥锁
std::mutex mtx;
// 条件变量
std::condition_variable cv;
// 线程函数,等待条件满足后再执行
void threadFunction() {
std::unique_lock<std::mutex> lock(mtx);
// 等待条件满足
cv.wait(lock, [] { return sharedData != 0; });
// 条件满足后执行操作
std::cout << "Thread: Data is " << sharedData << std::endl;
}
int main() {
// 创建一个线程
std::thread t(threadFunction);
// 模拟一些工作
std::this_thread::sleep_for(std::chrono::seconds(2));
// 更改共享资源,满足条件
{
std::lock_guard<std::mutex> lock(mtx);
sharedData = 42;
}
// 通知等待的线程条件已经满足
cv.notify_one();
// 等待线程执行完成
t.join();
return 0;
}
在这个示例中,我们有一个线程 threadFunction,它等待一个条件满足后才执行操作。在 main 函数中,我们创建了一个线程来执行 threadFunction。然后,我们模拟了一些工作,并更改了共享资源 sharedData 的值,使得条件变为真。
在更改共享资源后,我们调用 notify_one() 方法通知等待的线程条件已经满足,然后等待线程执行完成。在 threadFunction 中,我们使用 cv.wait() 来等待条件满足,当条件为真时,线程被唤醒继续执行。