GCC中条件变量wait_for存在漏洞

3

看起来gcc的std::condition_variable::cv.wait_for()存在一个bug。

如果在等待期间系统时间发生更改,将会返回错误的时间。

最常见的情况是:如果时间被调整到过去,则根本不会返回;如果时间被调整到未来,则立即唤醒。

我认为原因是它使用的是系统时钟而不是稳定时钟 (https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/condition_variable#L67)。

有人遇到过这个问题吗?有什么解决办法吗?


2
有什么解决方法?- 不要改变系统时间 ;-) - Jesper Juhl
正常情况下,系统时间有时需要被更改或调整。 - GabiMe
当然。稍作调整。但是,无论如何,您要求解决方法,而不是调整系统时间一种有效的解决方法。 - Jesper Juhl
1
@JesperJuhl SMITH:医生,我这样做会疼。DALE:那就别这样做。 - Piccolo
1个回答

10

看起来标准同意您使用的时钟应为 std::chrono::steady_clock

§ 30.5.1

  1. 作用:就像
    return wait_until(lock, chrono::steady_clock::now() + rel_time, std::move(pred));

这个bug似乎已经被GCC团队跟踪

至于修复/解决方案,您可以:


谢谢提供链接。Bug跟踪链接非常有意思。这个Bug已经存在9年了。。 - GabiMe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接