简体   繁体   English

std::condition_variable - 性能有什么不同吗?

[英]std::condition_variable - Is there any difference in performance?

Is there any difference in performance between those two:这两者在性能上有什么区别:

First version:第一个版本:

std::condition_variable conditionVarible;
std::mutex mutex;
std::chrono::steady_clock::time_point timePoint;

timePoint = std::chrono::steady_clock::now() + std::chrono::seconds(60);

std::unique_lock uniqueLock(mutex);
condition_variable.wait(uniqueLock, []() { 
    return std::chrono::steady_clock::now() >= timePoint; 
});

Second version:第二个版本:

std::condition_variable conditionVarible;
std::mutex mutex;
std::chrono::steady_clock::time_point timePoint;

timePoint = std::chrono::steady_clock::now() + std::chrono::seconds(60);

std::unique_lock uniqueLock(mutex);
condition_variable.wait_until(uniqueLock, timePoint, [](){ return false; });

Those two code snippets do two completely different things.这两个代码片段做了两件完全不同的事情。

The first one will wait until the condition variable gets signaled, then check whether the time has elapsed.第一个将等到条件变量收到信号,然后检查时间是否已经过去。 If it has, it wakes up.如果有,它就会醒来。 If it hasn't, it goes back to the wait state until the next signal.如果没有,它返回到等待状态直到下一个信号。 Repeat until done.重复直到完成。

The second one ignores signals.第二个忽略信号。 It will simply wait until until the time has elapsed.它只会等到时间过去。 It's an over-complicated and inefficient way to write sleep_until .编写sleep_until是一种过于复杂且效率低下的方法。

In short: this first will wake up on the first signal after the time has elapsed;简而言之:这第一个将在时间过去第一个信号上唤醒; the second will wake up after the time has elapsed.第二个将在时间过去后醒来。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM