1

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

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

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

有没有办法让这个更早返回?

4

1 回答 1

1

检查您实际上是在调用信号还是广播ready。如果您在实际等待之前不小心在哪里可以发出条件信号(这将导致等待超时),则可能会出现竞争。

于 2013-09-24T22:02:31.273 回答