一致性发生之前:深入理解
问题一:理解定义
给定的happens-before一致性定义表明,对于一组动作A,如果A 中的读操作 r 看到写操作 W(r),则不可能是 hb(r, W(r)) 或 A 中存在写 w 使得 w.v = r.v 且 hb(W( r)、w) 和 hb(w, r)。您认为它等同于“...,事实上既不是...也不是...”是正确的。
问题2:“w.v = r.v”的含义
“w.v = r.v”表示读动作r的值(用r.v表示)等于写动作w的值(用w.v表示)。
问题3:执行顺序中左边数字的含义
执行顺序中左边的数字代表每个线程内动作的顺序。例如,在第一个执行顺序中,“1: B = 1”表示线程 1 中的第一个操作是写入变量 B。
问题 4:非易失性变量的可见性
您对 r2 和 r1 都可以看到初始写入值 0 因为 A 和 B 不是易失性字段的理解是正确的。非易失性变量可以存储在寄存器中,这可能会使它们在较长时间内对其他线程不可见。
问题 5:第二个执行顺序中发生的一致性
第二个执行顺序确实是happens-before一致的。读取 r2 和 r1 分别发生在写入 A 和 B 之后,并且不存在违反发生之前关系的干预操作。
问题 6:具有 Read-After- 的真实情况写入
在实际应用中,先写后读的情况可能会发生在各种场景中。例如,考虑一个多线程应用程序,其中一个线程修改共享对象,而另一个线程在不同步的情况下读取同一对象。如果没有适当的机制,例如易失性变量或同步,读取线程最终可能会看到过时的值。
以上是每个执行订单是否保证 Happens-Before 的一致性?的详细内容。更多信息请关注PHP中文网其他相关文章!