我需要帮助来理解同步关系。我越读它试图理解的例子,我就越觉得我什么都不懂。有时我觉得这就是它,我明白了,但在看了另一个例子之后,我再次感到困惑。请帮我把它做对。
据说操作 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 更快,它可能会读取旧值。那么这里的关系是什么,有什么关系吗?如果没有,我该如何提供这种关系?
提前致谢。