How works std::condition_variable::wait_until

Why this code works very fast?

int main() {
    std::condition_variable cv;
    std::mutex mtx;
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait_until(lock, std::chrono::system_clock::now() + 10000ms);

    return 0;
}

Seems like wait_until ignored

Upvotes: 2

Views: 3292

Answers (1)

G.M.
G.M.

Reputation: 12899

You're probably getting a spurious wakeup. Try using the overload that accepts a predicate...

#include <condition_variable>

int main() {
    std::condition_variable cv;
    std::mutex mtx;
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait_until(lock, std::chrono::system_clock::now() + 10000ms, []{ return false; });

    return 0;
}

Upvotes: 4

Related Questions