std::condition_variable

91 阅读1分钟

以下是一个示例,演示了如何在 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() 来等待条件满足,当条件为真时,线程被唤醒继续执行。