我想知道在面向性能的代码中使用std::async
是否合适。具体地
我打算将繁重的会话对象传递给线程或写std::async
。
bool fun(MySession& sessRef);
MySession sess;
auto r = std::async(&fun, sess);
编辑:
答案 0 :(得分:2)
我们无法确切地告诉“std :: async如何实现”,因为你并没有提到实际提供该实现的特定工具链。
1。从工作线程到主线程捕获异常是否有任何惩罚?
定义“Penalty”究竟是什么意思?除非您澄清您的疑虑/要求,否则无法回答
通常不应该有任何惩罚,只需在线程中捕获创建抛出异常的异常。这只是可以通过join()
向创建线程提供异常,这会导致通过处理join()
来保留该特定异常的一些成本。
2。如何将值从worker返回到main?
引用c++ standards definition关于这一点的说法:
30.6.8函数模板异步
4 返回:类型为
future<typename result_of<typename decay<F>::type(typename decay<Args>::type...)>::type>
的对象,它引用此async
调用创建的共享状态。
3。由ref传递的输入参数实际上是不会被复制的 不?
这一点在此详细解答:Passing arguments to std::async by reference fails。如您所见,它们被复制的默认情况 根据{{3}}的评论,可以通过@Yakk传递这些参数,以避免对副本进行操作,但需要参考。
std::async
如何实施
我只能告诉c ++标准要求,应该如何实现,除非你指的是特定的工具链,试图提供std::async
的正确实现。