通知简历时,condition_variable :: wait_for是否返回true

时间:2020-04-03 08:01:18

标签: c++

这是一个小代码段

request_ptr pop()
{
    request_ptr rp;

    std::unique_lock<std::mutex> lock(cv_mtx);
    auto time = std::chrono::milliseconds(10000);
    if (!cv.wait_for(lock, time, [this] { return !this->is_empty(); }))
    {
        return rp;
    }

    std::lock_guard<std::mutex> mtx_guard(mtx);
    rp.reset(new request(std::move(requests.front())));
    requests.pop();
    return rp;
}

通知wait_forcv的行为如何? 是否返回true而不检查is_empty的返回值? 还是仅当true返回is_empty时返回true

1 个答案:

答案 0 :(得分:1)

根据[thread.condition.condvar]/36通话...

cv.wait_for(lock, rel_time, pred);

等同于...

cv.wait_until(lock, chrono::steady_clock::now() + rel_time, std::move(pred));

in turn,相当于...

while (!pred())
    if (wait_until(lock, abs_time) == cv_status::timeout)
        return pred();
return true;

因此wait_for返回的值应该是谓词返回的当前值。