condition_variable::wait_for 总是在等待

condition_variable::wait_for always waits?

本文关键字:在等待 wait variable condition for      更新时间:2023-10-16

我在单元测试中有一些代码,可以等到我的向量足够大:

bool waitForOutwardMessages(size_t size, int millis) {
    std::unique_lock<std::mutex> lock(mutex);
    return ready.wait_for(lock, std::chrono::milliseconds(millis), [=]{
        return this->messages.size() >= size;
    });
}
std::mutex mutex;
std::condition_variable ready;

足够简单。除了当我运行此测试时,我希望在另一个线程上进行此调用后,有问题的向量应该以毫秒的数量级填充。也许 10 毫秒,也许 100 毫秒,肯定在 1 秒内。但是当我传入 5000 作为millis参数时,这个函数总是等待 5 秒。

一方面,这很好,因为我不在乎这个测试需要多长时间。另一方面,我认为只有在条件变量未收到通知的情况下,它才应该等待持续时间......不总是如此?

有没有办法让它早点回来?

检查您是否确实在呼叫信号或在ready上广播。如果你不小心,在你实际等待之前可以发出信号,可能会有一场比赛(这将导致等到超时(。