原子操作对于互斥锁是否足够?

时间:2016-02-16 20:57:44

标签: mutex atomic memory-barriers

只是原子操作足以在x86中实现互斥锁。我问这与乱序执行有关。除了指定互斥锁是否被锁定的整数的原子访问之外,是否还有必要发生的其他操作以及原因?

1 个答案:

答案 0 :(得分:0)

答案取决于你所说的“只是原子操作”。在x86上正确对齐的读/写是原子的,Dekker和Peterson的互斥算法只使用读写。但是,如果没有使用(可能是隐式的)内存栅栏,两种算法都无法正常工作。问题是两种算法都假设比x86具有更强的内存一致性模型。具体来说,如果两次访问不是同一地址,x86允许在存储之后编程的负载更早发生。有关详细示例,请参阅here

如果通过“只是原子操作”,你包括LOCK前缀指令和XCHG(具有隐式LOCK前缀),那么答案是肯定的,因为所述指令具有隐式内存栅栏。例如,XCHG指令可用于执行Dekker和Peterson算法所需的顺序一致存储,或用于实现通常的测试和设置方法。

相关问题