condition_variable :: wait_for总是等待?

时间:2013-09-24 21:49:13

标签: c++ c++11

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

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秒。

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

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

1 个答案:

答案 0 :(得分:1)

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