std :: condition_variable:伪唤醒背后的确切科学是什么?

时间:2018-12-01 07:20:54

标签: c++

回答了另一个问题后,我决定调查虚假唤醒背后的确切问题。

首先,这是任何问题的重复(!!!)。大多数问题只是询问如何正确处理虚假唤醒,但没有一个实际上试图打破它们的发生方式。

我们都知道,即​​使未调用notify(),对condition_variable的wait()也会引起唤醒。

std::mutex cond_mutex;
std::condition_variable cv;

void test(){
    std::unique_lock<std::mutex> lk(cond_mutex);
    cv.wait(lk); // may wake up without notify()
}

我知道如何正确地等待(),但是我不知道到底是什么导致这些虚假的唤醒。

从非常低的角度来看,如果有人可以对它有所了解会很有趣。这一定是某种竞赛条件,但我想确切了解它的发生方式/原因。

0 个答案:

没有答案