我想知道在性能导向的代码中使用std::async
是否合适。具体来说:
- 从工作线程到主线程捕获异常是否会有惩罚?
- 如何将值从工作线程返回给主线程?
- 传递的输入参数通过引用实际上是否不会被复制?
我计划将一个重型会话对象传递给一个线程或编写std::async
。
bool fun(MySession& sessRef);
MySession sess;
auto r = std::async(&fun, sess);
编辑:
- 我计划在GCC 4.9.1和VS2013上使用它,因为该应用程序是平台无关的。然而,大多数部署将基于*nix,所以至少需要GCC性能良好。
std::ref
或std::cref
将其封装在reference_wrapper
中。就像std::bind
和std::thread
构造函数一样,std::async
会将其参数复制到其他存储空间,使它们的生命周期与调用的范围不同。 - Caseyasync
参考链接。 - Kerrek SBstd::launch::async
作为std::async
的策略,那么它不能保证并行执行。实现还可以自由地使用其他实现定义的值作为默认值,甚至可以急切地执行回调函数。 - Mgetz