C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用

参考博客:C++笔记之各种sleep方法总结

code review!

文章目录

  • C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用
    • 1.条件变量(Condition Variable)
    • 2.cv.wait_for
    • 3.cv.wait
    • 4.cv.wait和cv.wait_for比较

1.条件变量(Condition Variable)

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用_第1张图片

2.cv.wait_for

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用_第2张图片

代码

#include 
#include 
#include 
#include 

std::mutex mtx;
std::condition_variable cv;
bool condition = false;

void waitForCondition() {
    std::unique_lock<std::mutex> lock(mtx);
    // 等待一段时间,或直到条件满足
    if (cv.wait_for(lock, std::chrono::seconds(3), []{ return condition; })) {
        std::cout << "Condition is satisfied!" << std::endl;
    } else {
        std::cout << "Timed out waiting for condition." << std::endl;
    }
}

void notifyCondition() {
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟一些操作
    {
        std::lock_guard<std::mutex> lock(mtx);
        condition = true;
    }
    cv.notify_one(); // 通知一个等待的线程
}

int main() {
    std::thread t1(waitForCondition);
    std::thread t2(notifyCondition);

    t1.join();
    t2.join();

    return 0;
}

3.cv.wait

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用_第3张图片

代码

#include 
#include 
#include 
#include 

std::mutex mtx;
std::condition_variable cv;
bool condition = false;

void waitForCondition() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return condition; }); // 等待条件满足
    std::cout << "Condition is satisfied!" << std::endl;
}

void notifyCondition() {
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟一些操作
    {
        std::lock_guard<std::mutex> lock(mtx);
        condition = true;
    }
    cv.notify_one(); // 通知一个等待的线程
}

int main() {
    std::thread t1(waitForCondition);
    std::thread t2(notifyCondition);

    t1.join();
    t2.join();

    return 0;
}

4.cv.wait和cv.wait_for比较

C++笔记之条件变量(Condition Variable)与cv.wait 和 cv.wait_for的使用_第4张图片

你可能感兴趣的:(c++,笔记,开发语言)