首页 > 解决方案 > 为什么要打印 1,3,2?

问题描述

我试图理解 C++ 中的 std::condition_variable 。我希望函数中的 wait 语句调用 third 来阻止进程,直到 second 和 first 完成,但事实并非如此。为什么不等?它一直在打印 1,3,2。

#include <functional>
#include <mutex>
#include <condition_variable>
#include <future>
#include <iostream>
#include <string>
condition_variable c;
bool is1C=false, is2C=false, is3C=false;
mutex m1,m2,m3;
void printFirst(){
    cout<<"1";
}
void printSecond(){
    cout<<"2";
}
void printThird(){
    cout<<"3";
}
void first(function<void()> printFirst) {
    printFirst();
    is1C=true;
    c.notify_all();
}

void second(function<void()> printSecond) {
    unique_lock<mutex> sL1(m1);
    c.wait(sL1,[]{return is1C==true;});
    printSecond();
    is2C=true;
    c.notify_all();
}

void third(function<void()> printThird) {
    unique_lock<mutex> sL2(m2);
    c.wait(sL2,[]{return is2C==true && is2C==true;});
    printThird();
}

int main() {
    function<void()> printFirstN=printFirst;
    function<void()> printSecondN=printSecond;
    function<void()> printThirdN=printThird;
    std::async(printFirstN);
    std::async(printThirdN);
    std::async(printSecondN);
}

标签: c++multithreadingcondition-variable

解决方案


推荐阅读