知识卡片

future析构有差异

普通读书笔记卡 · 1437

内容

只有可结合的 thread 析构才会终止程序;future 通常只销毁自身,但关联 async 异步任务共享状态的最后一个句柄可能等待任务结束。不能把所有句柄析构看作同一种操作:要先追踪共享状态来源、启动策略和最后拥有者。

参考来源

- 位置:《Effective Modern C++》第7章《并发API》,条款三十八:关注不同线程句柄的析构行为(源文件:_epub-src/EPUB/text/ch008.xhtml) - 结论依据:原文精确限定async未延迟任务共享状态的最后future会等待,其余future通常正常析构。 - 原始内容:future 的正常析构行为就是销毁 future 本身的数据成员。 引用了共享状态——使用 std::async 启动的未延迟任务建立的那个——的最后一个 future 的析构函数会阻塞住,直到任务完成。