我正在使用condition_variable
Visual Studio 2019。该condition_variable.wait_for()
函数在std::cv_status::no_timeout
没有任何通知的情况下返回。
#include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
std::condition_variable cv;
std::mutex mtx;
bool called = false;
void printThread()
{
std::unique_lock<std::mutex> lck(mtx);
while (std::cv_status::timeout == cv.wait_for(lck, std::chrono::seconds(1)))
{
std::cout << "*";
}
std::cout << "thread exits" << std::endl;
}
int main()
{
std::thread th(printThread);
th.join();
std::cout << "program exits" << std::endl;
}
我认为代码永远不会退出并继续打印*
,但它会在打印一些后退出*
。
这是输出:
********************************************************************thread exits
program exits
为什么会这样?是不是所谓的“虚假唤醒”?</p>