将std :: async的默认启动策略与更新的编译器一起使用会更好吗?

时间:2019-04-01 15:13:48

标签: c++ c++11 asynchronous

众所周知,使用std::async时,默认启动策略可能导致延迟执行。例如,请参见How does a C++ compiler choose between deferred and async execution for std::async?

在将MinGW-W64与gcc 5.2.0一起使用时,我已经在这里看到这种行为。因此,我已经习惯于始终将std::launch::async作为启动策略。

最近,我已经意识到较新的gcc版本的行为有所不同。当使用MinGW-W64和g ++ 8.1.0时,省略std::async启动策略也会导致上面链接的示例代码中的异步执行。因此,我不再看到std::async启动策略的明显优势。

相反,斯科特·迈耶(Scott Meyer)的“有效的现代C ++”项目35似乎暗示,如果C ++标准库实现了合理的线程,则默认的lauch策略可能会阻止线程外异常或导致更好的负载平衡。调度程序。

是这种情况吗?因此,我应该习惯于遵循默认启动策略吗?这是所有(相对较新的)C ++编译器的一般建议吗?

0 个答案:

没有答案