- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
根据 C++ 标准的 [futures.async]/3 项目符号 1,当函数 f
使用 std 传递给
启动策略,std::async
时: :launch::asyncf
将“就像在新的执行线程中一样”运行。
鉴于 f
可以做任何事情,包括无限循环和永远阻塞,实现如何提供 f
在其自己的线程上运行而不实际运行它的行为它自己的线程?也就是说,实现如何利用标准提供的“好像”摆动空间?
最佳答案
查看 C++ 引用中出现的 here和 here ,似乎“好像”的目标是让库实现者有一定程度的自由度。例如,它说
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 execution 与 std::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/
嘿。本周的一个教程,其中一个问题要求通过使用其他函数 formatLine 和 formatList 创建一个函数 formatLines,以格式化行列表。 我的代码是这样的; type Line =
我是一名优秀的程序员,十分优秀!