gpt4 book ai didi

c++ - 有没有办法以保证无等待的方式检查 std::future 状态是否准备就绪?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:19 24 4
gpt4 key购买 nike

我知道我可以通过以下方式检查 std::future 的状态:

my_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready

但根据cppreference.com std::future::wait_for 在某些情况下可能会阻塞:

This function may block for longer than timeout_duration due to scheduling or resource contention delays.

timeout_duration 为 0 时还是这样吗?如果是这样,是否有另一种方式以保证无等待的方式查询状态?

最佳答案

quote from cppreference只是提醒您操作系统调度程序是一个因素,其他需要平台资源的任务可能正在使用您的线程从 wait_for() 返回所需的 CPU 时间——无论指定的超时持续时间是否为零。就这样。从技术上讲,您不能保证在非实时平台上获得比这更多的东西。因此,C++ 标准对此只字不提,但您可以在那里看到其他有趣的内容——请参阅 [futures.unique_future¶21] 下的 wait_for() 段落:

Effects: None if the shared state contains a deferred function ([futures.async]), otherwise blocks until the shared state is ready or until the relative timeout ([thread.req.timing]) specified by rel_­time has expired.

这里没有提到额外的延迟,但它确实说你阻止了,并且它仍然取决于实现是否 wait_for()yield()在这种阻塞或超时持续时间为零时立即返回线程1。此外,实现可能还需要以锁定方式同步对 future 状态的访问,这必须在检查是否可能立即返回之前应用。因此,您甚至无法保证 lock-freedom在这里,更不用说等待自由了。

请注意,这同样适用于调用 wait_until过去一段时间。

Is it still the case when timeout_duration is 0 ? If so, is there another way to query the state in a guaranteed wait-free manner ?

是的,尽管实现了 wait_free()情况仍然如此。因此,这是最接近无等待的状态检查。


1 简单来说,这意味着“释放”CPU 并将您的线程放在调度程序队列的后面,从而给其他线程一些 CPU 时间。

关于c++ - 有没有办法以保证无等待的方式检查 std::future 状态是否准备就绪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52514850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com