【发布时间】:2011-05-25 06:36:49
【问题描述】:
我需要帮助来理解同步关系。我越读它试图理解的例子,我就越觉得我什么都不懂。有时我觉得这就是它,我明白了,但在看了另一个例子之后,我再次感到困惑。请帮我把它弄好。
据说操作A与操作B同步-如果A是对某个原子变量m的存储,具有释放语义,B是来自同一个变量m的加载,具有获取语义,并且B读取存储的值由 A. 也有人说,操作 A 发生在操作 B 之前,如果
- A 在与 B 相同的线程上执行,并且 A 在程序顺序上位于 B 之前,或者
- A 与 B 同步,或
- A 发生在其他操作 C 之前,C 发生在 B 之前
好的。如果我们看这个例子
thread0 执行 | thread1 执行
存储 x(发布)|加载 x(获取)
这里存储到 x 是否与来自 x 的加载同步?如果我们在这里确实有同步关系,那么存储到 x 发生在从 x 加载之前,所以在线程 0 中存储到 x 之前排序的所有内容都发生在从线程 1 中从 x 加载之前。这意味着这里有强制排序。这样对吗?但在这种情况下,我不明白定义部分的“和 B 读取 A 存储的值”是什么意思?如果线程 1 比线程 0 更快,它可能会读取旧值。那么这里的关系是什么,有什么关系吗?如果没有,我该如何提供这种关系?
提前致谢。
【问题讨论】:
标签: language-agnostic synchronization atomic memory-barriers