知识卡片

显式async策略

普通读书笔记卡 · 1435

内容

std::async 默认策略允许异步线程执行或延迟执行;延迟任务可能直到非定时等待或 get 才运行,甚至从未运行。需要真正异步时指定 launch::async,并处理启动失败。策略也影响等待行为和[[future析构有差异]]。

参考来源

- 位置:《Effective Modern C++》第7章《并发API》,条款三十六:如果有异步的必要请指定 std::launch::async(源文件:_epub-src/EPUB/text/ch008.xhtml) - 结论依据:原文区分启动策略并说明延迟执行影响thread_local与定时等待,故需要显式表达并发要求。 - 原始内容:std::async 的默认启动策略是异步和同步执行兼有的。 这个灵活性导致访问 thread_local s的不确定性,隐含了任务可能不会被执行的意思,会影响调用基于超时的 wait 的程序逻辑。 如果异步执行任务非常关键,则指定 std::launch::async 。