![](/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.