小编lfy*_*ybt的帖子

C++中的条件变量wait_for

我正在使用condition_variableVisual 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;
}
Run Code Online (Sandbox Code Playgroud)

我认为代码永远不会退出并继续打印*,但在打印一些*.

这是输出:

********************************************************************thread exits
program exits
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?难道就是所谓的“虚假唤醒”?

c++ condition-variable unique-lock

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

标签 统计

c++ ×1

condition-variable ×1

unique-lock ×1