我是多处理器编程的新手。
在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/