知识卡片
共享状态连接异步两端
内容
异步结果不能只存在被调用者或调用者的句柄里,因为两端寿命可能不同;共享状态在两者之间保存结果或异常,并由有关对象共同管理。理解 future 的等待和销毁,要追踪共享状态的来源与拥有者,不能只看变量作用域。
参考来源
- 位置:《Effective Modern C++》第7章《并发API》,条款三十八:关注不同线程句柄的析构行为(源文件:_epub-src/EPUB/text/ch008.xhtml)
- 结论依据:原文解释结果需存放在调用者与被调用者之外,命名为共享状态,并关联到句柄销毁语义。
- 原始内容:因为与被调用者关联的对象和与调用者关联的对象都不适合存储这个结果,所以必须存储在两者之外的位置。此位置称为 共享状态 ( shared state )。共享状态通常是基于堆的对象,但是标准并未指定其类型、接口和实现。标准库的作者可以通过任何他们喜欢的方式来实现共享状态。