【发布时间】:2017-08-23 10:48:32
【问题描述】:
[以下,C++ 术语]
我有一个线程 A 和线程 B 共享对整数值 P 的访问。线程 A 初始化这个值并在运行时更新它。然后线程 A 完成。线程 B 等待线程 A 完成(标准 OS API 调用,无论使用什么操作系统)并想要读取 P。
线程 B 是否需要内存屏障来读取线程 A 最后设置的一致的 P 值?是否有可能当 OS API 说“线程 A 完成”时,它修改的内存更改对其他线程不可见?
请注意,只有一个 线程在此处写入值,这可能会或可能不会将此问题与之前提出的“Is there an implicit memory barrier with synchronized-with relationship on thread::join?”区分开来。我的直觉告诉我答案应该是一样的,但是......
【问题讨论】:
-
这听起来像是 `std::future 的工作。
-
从阅读 this 开始,我会说是的 - .join() 确实同步,并且您不需要内存屏障。但是这段文字不是写给普通人解释的,所以我会把答案留给其他人。也可能是 stackoverflow.com/questions/12444891/… 的副本
标签: c++ multithreading synchronization barrier