zoukankan      html  css  js  c++  java
  • 条件变量 condition_variable wait_until

    wait_until(阻塞当前线程,直到条件变量被唤醒,或直到抵达指定时间点)

    #include <iostream>
    #include <atomic>
    #include <condition_variable>
    #include <thread>
    #include <chrono>
    using namespace std::chrono_literals;
     
    std::condition_variable cv;
    std::mutex cv_m;
    std::atomic<int> i{0};
     
    void waits(int idx)
    {
        std::unique_lock<std::mutex> lk(cv_m);
        auto now = std::chrono::system_clock::now();
        if(cv.wait_until(lk, now + idx*100ms, [](){return i == 1;}))
            std::cerr << "Thread " << idx << " finished waiting. i == " << i << '
    ';
        else
            std::cerr << "Thread " << idx << " timed out. i == " << i << '
    ';
    }
     
    void signals()
    {
        std::this_thread::sleep_for(120ms);
        std::cerr << "Notifying...
    ";
        cv.notify_all();
        std::this_thread::sleep_for(100ms);
        i = 1;
        std::cerr << "Notifying again...
    ";
        cv.notify_all();
    }
     
    int main()
    {
        std::thread t1(waits, 1), t2(waits, 2), t3(waits, 3), t4(signals);
        t1.join(); 
        t2.join();
        t3.join();
        t4.join();
    }
    
  • 相关阅读:
    美化博客园
    ansible的安装
    面向对象和类
    函数知识分类
    生成器
    内置函数_old
    迭代器
    装饰器
    Hadoop——MapReduce
    Hadoop——HDFS
  • 原文地址:https://www.cnblogs.com/smallredness/p/10904176.html
Copyright © 2011-2022 走看看