当前位置:网站首页>std::condition_ variable::wait_ for

std::condition_ variable::wait_ for

2022-06-13 05:02:00 Snow * sleet * snow

wait:https://blog.csdn.net/qq_34999565/article/details/120874408?utm_source=app&app_version=4.17.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
Examples of use , and wait Is the difference between the wait_for You can set a timeout

#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 << '\n';
    else
        std::cerr << "Thread " << idx << " timed out. i == " << i << '\n';
}
 
void signals()
{
    
    std::this_thread::sleep_for(120ms);
    std::cerr << "Notifying...\n";
    cv.notify_all();
    std::this_thread::sleep_for(100ms);
    {
    
        std::lock_guard<std::mutex> lk(cv_m);
        i = 1;
    }
    std::cerr << "Notifying again...\n";
    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();
}

Output :

Thread 1 timed out. i == 0
Notifying…
Thread 2 timed out. i == 0
Notifying again…
Thread 3 finished waiting. i == 1

2
3

原网站

版权声明
本文为[Snow * sleet * snow]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202280516196397.html