gpt4 book ai didi

c++ - std::async 是如何实现的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:04 25 4
gpt4 key购买 nike

我想知道在面向性能的代码中使用 std::async 有多合适。具体

  1. 捕获从工作线程到主线程的异常是否有任何惩罚?
  2. 如何将值从 worker 返回到 main?
  3. ref 传递的输入参数是否实际上从未被复制过?

我打算将繁重的 session 对象传递给线程或编写 std::async

bool fun(MySession& sessRef);
MySession sess;
auto r = std::async(&fun, sess);

编辑:

  • 我计划将它与 GCC 4.9.1 和 VS2013 一起使用,因为该应用程序与平台无关。然而,大多数部署将基于 *nix,因此至少 GCC 应该是高性能的。

最佳答案

我们不能确切地告诉“std::async 是如何实现的”,因为您指的不是实际提供该实现的特定工具链。

1. Is there any penalty in catching the exception from worker thread to main thread?


定义“惩罚”到底是什么意思?除非您澄清您的顾虑/要求,否则无法回答。
通常不应该有任何惩罚,只要捕获线程中的异常,就可以创建抛出异常。这只是关于可以通过 join() 向创建线程提供的异常。 ,这会导致通过处理 join() 来保留该特定异常的成本。 .

2. How are the values returned from worker to main?


引用什么是c++ standards definition说到这一点:

30.6.8 Function template async

4 Returns: An object of type future<typename result_of<typename decay<F>::type(typename decay<Args>::type...)>::type> that refers to the shared state created by this call to async.


3. Are the input arguments passed by ref actually never get copied or not?

此处详细回答了这一点:Passing arguments to std::async by reference fails .如您所见,它们是复制的默认大小写。
根据@Yakk的评论,可能可以通过 std::ref 传递这些参数避免对拷贝进行操作,但引用。


how is std::async implemented

我只能告诉 c++ 标准要求,它应该如何实现,除非你指的是一个特定的工具链,它试图提供 std::async 的正确实现。 .

关于c++ - std::async 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25673475/

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