我是多处理器编程的新手。

article中了解x86内存模型。



请帮忙

最佳答案

遵守因果关系意味着,如果事物A导致另一件事B,并且如果您观察到B发生了,那么您还将观察到A发生了。考虑以下代码:

x = 0
y = 0

thread 1        thread 2

  x = 10          r1 = y   // #1
  y = 25          r2 = x   // #2

假定所有读写都是正确的(即在指令级别没有撕裂的原子,例如通过使用C++中的宽松原子),请考虑线程2在#1点对世界的看法。
  • 如果r1为零,那么我们一无所知。线程1的执行可以在任何地方;它可能尚未开始,或者可能已经完成,但是更改尚不可见。
  • 但是,如果r1为25,则通过因果关系,我们知道r2必须读取为10,因为r1可以读取25的唯一方法是,如果线程1已经执行了两个语句,并且x86的强存储顺序确保先前(可能是先前)存储的效果是可见的。

  • 请注意,这不是所有硬件的通用功能。在当今流行的内存模型(例如C++ 11,C11,Java和Go的内存模型)中,我们可以说在上述操作中,存储y = 25具有“发布顺序”,而加载r1 = y具有“获取顺序”,并且这两个操作“同步”。

    关于x86 - “memory ordering obeys causality”的意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27374538/

    10-12 23:34