众所周知,使用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 ++编译器的一般建议吗?