来自 cppreference的引用只是为了提醒您操作系统调度程序是这里的一个因素,并且需要平台资源的其他任务可能正在使用您的线程需要的 CPU 时间才能从中返回wait_for()
- 无论指定的超时持续时间为零或不。就这样。从技术上讲,您不能保证在非实时平台上获得更多。因此,C++ 标准对此只字未提,但您可以在那里看到其他有趣的东西——参见[futures.unique_future¶21]wait_for()
下的段落:
效果:如果共享状态包含延迟函数([futures.async]),则无,否则阻塞,直到共享状态准备好或直到由指定的相对超时([thread.req.timing])
rel_time
到期。
这里没有提到额外的延迟,但它确实说你被阻塞了,并且它仍然依赖于实现,wait_for()
是在这种阻塞时首先执行yield()
线程1还是在超时持续时间为零时立即返回。此外,实现还可能需要以锁定方式同步对未来状态的访问,这必须在检查是否发生潜在的立即返回之前应用。因此,您在这里甚至没有锁自由的保证,更不用说等待自由了。
请注意,这同样适用于wait_until
过去时间的呼叫。
timeout_duration 为 0 时仍然如此吗?如果是这样,是否有另一种方法以保证无等待的方式查询状态?
所以是的,wait_free()
尽管实施了,但情况仍然如此。因此,这是您检查状态时最接近无等待的方式。
1简单来说,这意味着“释放” CPU 并将您的线程放在调度程序队列的后面,给其他线程一些 CPU 时间。