我知道我可以通过以下方式检查std::future
的状态:my_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready
但是根据cppreference.com,std::future::wait_for
在某些情况下可能会阻塞:
timeout_duration
为0时是否仍然如此?如果是这样,是否还有另一种以保证免等待的方式查询状态的方法?
最佳答案
quote from cppreference只是在这里提醒您,操作系统调度程序是此处的一个因素,其他需要平台资源的任务可能正在使用线程从wait_for()
返回所需的CPU时间-无论指定的超时时间为零还是不是。就这样。从技术上讲,您不能保证在非实时平台上能获得更多 yield 。因此,C++标准对此一无所获,但您可以在此处看到其他有趣的内容-参见[futures.unique_future¶21]下的wait_for()
段落:
此处没有提及额外延迟,但是它确实说您被阻止了,,并且仍然取决于实现取决于wait_for()
是 yield()
是在此类阻止时首先在线程1上执行还是在超时时间为零时立即返回。此外,对于实现而言,也可能有必要以锁定方式同步对 future 状态的访问,这必须在检查是否要立即发生潜在返回之前应用。因此,在这里您甚至没有保证lock-freedom,更不用说等待自由了。
请注意,使用过去的时间调用 wait_until
也是一样。
所以是的,尽管实现了wait_free()
,但情况仍然如此。因此,这是最接近等待状态的状态。
1简单来说,这意味着“释放” CPU并将线程放在调度程序队列的后面,从而给其他线程一些CPU时间。
关于c++ - 有没有一种方法可以检查std::future状态是否处于等待状态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52514850/