条件变量:: wait_for中的gcc错误

Gab*_*iMe 2 c++ gcc

似乎gcc中存在一个错误std::condition_variable::cv.wait_for().

如果系统时间在等待期间发生变化,则会在错误的时间段后返回.

大多数情况下 - 如果时间移动到过去,它就不会返回,或者如果时间移动到未来,它会立即唤醒.

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

有人遇到过这个问题吗?什么可能是一个解决方法?

Ant*_*ois 9

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

§30.5.1

  1. 效果:好像
    return wait_until(lock, chrono::steady_clock::now() + rel_time, std::move(pred));

这个错误似乎也已被GCC人员跟踪.

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