gpt4 book ai didi

c++ - 如果不这样做,函数如何在新线程上运行 "as if"?

转载 作者:IT老高 更新时间:2023-10-28 21:57:11 25 4
gpt4 key购买 nike

根据 C++ 标准的 [futures.async]/3 项目符号 1,当函数 f 使用 std 传递给 std::async 时: :launch::async 启动策略,f 将“就像在新的执行线程中一样”运行。

鉴于 f 可以做任何事情,包括无限循环和永远阻塞,实现如何提供 f 在其自己的线程上运行而不实际运行它的行为它自己的线程?也就是说,实现如何利用标准提供的“好像”摆动空间?

最佳答案

查看 C++ 引用中出现的 herehere似乎“好像”的目标是让库实现者有一定程度的自由度。例如,它说

as if spawned by std::thread(std::forward(f), std::forward(args)...), except that if the function f returns a value or throws an exception, it is stored in the shared state accessible through the std::future that async returns to the caller.

在第一个来源中,并且

as if a thread object is constructed with fn and args as arguments, and accessing the shared state of the returned future joins it

在第二个。所以看起来行为类似于 std::thread 但可能以不同的方式实现。这很有趣,因为您在此处引用的短语 thread of executionstd::thread 是有区别的。尽管如此,似乎两个来源都以这种方式理解 as-if

另一个选项可能是 François Andrieux 所建议的。允许使用线程池,如第一个来源中所述:

The template function async runs the function f asynchronously (potentially in a separate thread which may be part of a thread pool)

关于c++ - 如果不这样做,函数如何在新线程上运行 "as if"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50221043/

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