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

    wait_for(阻塞当前线程,直到条件变量被唤醒,或到指定时限时长后)

    #include <iostream>
    #include <atomic>
    #include <condition_variable>
    #include <thread>
    #include <chrono>
    using namespace std::chrono_literals;
     
    std::condition_variable cv;
    std::mutex cv_m;
    int i;
     
    void waits(int idx)
    {
        std::unique_lock<std::mutex> lk(cv_m);
        if(cv.wait_for(lk, 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);
        {
            std::lock_guard<std::mutex> lk(cv_m);
            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();
    }
    
  • 相关阅读:
    函数、对象
    webpack配置
    创智培训内容
    oracle方法
    Weblogic
    药店
    ip
    jdk账号
    ansible
    目录编码
  • 原文地址:https://www.cnblogs.com/smallredness/p/10904153.html
Copyright © 2011-2022 走看看