我知道我可以通过以下方式检查std::future的状态:
my_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready
但是根据cppreference.comstd::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/

10-09 07:01
查看更多