https://gcc.gnu.org/bugzilla/show_bug.cgi?id=41861

Austin Beer <asbeer at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |asbeer at gmail dot com

--- Comment #16 from Austin Beer <asbeer at gmail dot com> ---
Back in 2017 I spent a lot of time (along with the maintainer) testing and
fixing time-related QOI issues in the Boost.Thread library, which were included
in Boost 1.67. The two main solutions we employed were:

1. We used chrono::steady_clock as the primary clock inside condition_variable.
2. When converting from another clock to chrono::steady_clock in *_until()
functions, we polled the other clock periodically (i.e. every 100 milliseconds)
in case the other clock had jumped.

Here is the PR, the test code, and the final test results after fixing as much
as we could.

https://github.com/boostorg/thread/pull/142
https://github.com/austin-beer/test-time-jumps/blob/master/test_time_jumps.cpp
https://github.com/austin-beer/test-time-jumps/blob/master/linux_results_develop1_default.txt

I've also created a similar test for libstdc++ and uploaded those results. I
tested against GCC 8.3.0.

https://github.com/austin-beer/test-time-jumps/blob/master/test_time_jumps_libstdcxx.cpp
https://github.com/austin-beer/test-time-jumps/blob/master/test_time_jumps_libstdcxx_results.txt

So I support Mike Crowe's suggestion that std::condition_variable be changed to
use std::chrono::steady_clock.

Reply via email to