diff options
author | Mike Crowe <mac@mcrowe.com> | 2018-08-01 15:39:57 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2018-08-01 16:39:57 +0100 |
commit | 9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7 (patch) | |
tree | 823a9f37c46670bcc8fb5298f87b86f0029d25d0 /libstdc++-v3/include/std/condition_variable | |
parent | 2f5934326542b3f303db91cc4cd432cd488f0258 (diff) | |
download | gcc-9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7.zip gcc-9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7.tar.gz gcc-9e68aa3cc52956ea99bb726c3c29ce0581b9f7e7.tar.bz2 |
Use steady_clock to implement condition_variable::wait_for
The C++ standard says that std::condition_variable::wait_for should be
implemented to be equivalent to:
return wait_until(lock, chrono::steady_clock::now() + rel_time);
But the existing implementation uses chrono::system_clock. Now that
wait_until has potentially-different behaviour for chrono::steady_clock,
let's at least try to wait using the correct clock.
2018-08-01 Mike Crowe <mac@mcrowe.com>
* include/std/condition_variable (wait_for): Use steady_clock.
From-SVN: r263225
Diffstat (limited to 'libstdc++-v3/include/std/condition_variable')
-rw-r--r-- | libstdc++-v3/include/std/condition_variable | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable index c00afa2..1f84ea3 100644 --- a/libstdc++-v3/include/std/condition_variable +++ b/libstdc++-v3/include/std/condition_variable @@ -66,6 +66,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION class condition_variable { typedef chrono::system_clock __clock_t; + typedef chrono::steady_clock __steady_clock_t; typedef __gthread_cond_t __native_type; #ifdef __GTHREAD_COND_INIT @@ -144,11 +145,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION wait_for(unique_lock<mutex>& __lock, const chrono::duration<_Rep, _Period>& __rtime) { - using __dur = typename __clock_t::duration; + using __dur = typename __steady_clock_t::duration; auto __reltime = chrono::duration_cast<__dur>(__rtime); if (__reltime < __rtime) ++__reltime; - return wait_until(__lock, __clock_t::now() + __reltime); + return wait_until(__lock, __steady_clock_t::now() + __reltime); } template<typename _Rep, typename _Period, typename _Predicate> |