gpt4 book ai didi

c++ - std::condition_variable::wait_until 的实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:31 25 4
gpt4 key购买 nike

我正在阅读 libstdc++ implementation std::condition_variable::wait_until,这里是来源:

template<typename _Clock, typename _Duration>
cv_status
wait_until(unique_lock<mutex>& __lock,
const chrono::time_point<_Clock, _Duration>& __atime)
{
// DR 887 - Sync unknown clock to known clock.
const typename _Clock::time_point __c_entry = _Clock::now();
const __clock_t::time_point __s_entry = __clock_t::now();
const auto __delta = __atime - __c_entry;
const auto __s_atime = __s_entry + __delta;

return __wait_until_impl(__lock, __s_atime);
}

template<typename _Clock, typename _Duration, typename _Predicate>
bool
wait_until(unique_lock<mutex>& __lock,
const chrono::time_point<_Clock, _Duration>& __atime,
_Predicate __p)
{
while (!__p())
if (wait_until(__lock, __atime) == cv_status::timeout)
return __p();
return true;
}

第二个函数在循环中调用第一个函数。它会做时钟同步操作。所以如果我们调用第二个函数,同步操作可能会运行很多次。每次都需要同步时钟吗?我认为代码在第二个功能中只能通过同步时钟提高一次。我说得对吗?

最佳答案

我认为你是对的。另一方面,使用 wait_until 的假设通常是事件只会稀疏地发生,并且谓词对于除了少数不需要的唤醒实例之外的所有实例都返回 true。因此,重新同步时钟的开销应该是最小的。还要记住,在这种情况下,线程必须被唤醒并已经被调入,这可能比查询时钟更昂贵。

关于c++ - std::condition_variable::wait_until 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32327829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com