相关疑难解决方法(0)

有没有notify_one()队列?

考虑第一个线程函数和全局变量:

    std::mutex mut;
    std::condition_variable officer;
    bool firstPlayerIsReady = false;
    bool secondPlayerIsReady = false;
Run Code Online (Sandbox Code Playgroud)
void firstPlayer(){
    constexpr auto doIt = true;
    while(doIt)
    {
        std::unique_lock lock{mut};
        auto toContinue = ring();
        secondPlayerIsReady = true;
        firstPlayerIsReady = false;
        officer.notify_one();   //#1
        if(!toContinue) return;
        officer.wait(lock,[=](){ return firstPlayerIsReady;});
    }
}
Run Code Online (Sandbox Code Playgroud)

它调用一些ring和ring()返回一个连续条件; 然后它会在下一个循环中更新每个线程的准备值;

考虑下一个线程:

void secondPlayer(){
    constexpr auto doIt = true;
    while(doIt)
    {
        auto period = std::chrono::seconds(5);
        std::this_thread::sleep_for(period);

        std::unique_lock lock{mut};   //#2
        officer.wait(lock,[this](){ return secondPlayerIsReady;});
        auto toContinue = ring();
        firstPlayerIsReady = true;
        secondPlayerIsReady = false;
        officer.notify_one();
        if(!toContinue) return;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading race-condition

1
推荐指数
1
解决办法
77
查看次数

标签 统计

c++ ×1

multithreading ×1

race-condition ×1