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();
    }
    
  • 相关阅读:
    DBHelper
    ASP.NET WEBAPI oken验证
    市面上的网盘和搜索网盘资源网站
    C#批量删除注释与空行
    DB help
    抽象工厂1
    抽象工厂
    单例模式的八种写法
    Docker概念
    Django的安装
  • 原文地址:https://www.cnblogs.com/smallredness/p/10904153.html
Copyright © 2011-2022 走看看