![](/img/trans.png)
[英]What is the difference between std::condition_variable and std::condition_variable_any?
[英]std::condition_variable - Is there any difference in performance?
这两者在性能上有什么区别:
第一个版本:
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;
});
第二个版本:
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; });
这两个代码片段做了两件完全不同的事情。
第一个将等到条件变量收到信号,然后检查时间是否已经过去。 如果有,它就会醒来。 如果没有,它返回到等待状态直到下一个信号。 重复直到完成。
第二个忽略信号。 它只会等到时间过去。 编写sleep_until
是一种过于复杂且效率低下的方法。
简而言之:这第一个将在时间过去后的第一个信号上唤醒; 第二个将在时间过去后醒来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.