【发布时间】:2023-03-13 14:16:01
【问题描述】:
我正在阅读std::condition_variable::wait_until的libstdc++implementation,这里是出处:
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;
}
第二个函数循环调用第一个函数,它会做时钟同步操作。所以如果我们调用第二个函数,同步操作可能会运行很多次。每次都需要同步时钟吗?我想代码在第二个功能中只能通过一次同步时钟来改进。我说的对吗?
【问题讨论】:
标签: c++ multithreading condition-variable