【发布时间】:2011-02-02 01:02:45
【问题描述】:
原子操作的成本是多少(比较和交换或原子加/减)?它消耗多少周期?它会暂停 SMP 或 NUMA 上的其他处理器,还是会阻止内存访问? 它会刷新乱序 CPU 中的重排序缓冲区吗?
会对缓存产生什么影响?
我对现代流行的 CPU 感兴趣:x86、x86_64、PowerPC、SPARC、Itanium。
【问题讨论】:
-
@Jason S,任何。 cas 和 atomic inc/dec 之间的差异可以忽略不计。
-
x86 上的原子操作会随着内存地址的争用而变慢。我相信通常它们比非锁定操作慢一个数量级,但显然这将取决于所使用的操作、争用和内存屏障。
-
嗯。 writes 在 x86 上似乎是原子的。 '了解 Linux 内核'->spin_unlock
-
32 位写入在 Java 中是原子的,即它是可移植的原子(但没有内存屏障语义,因此这对于指针来说通常是不够的)。添加 1 通常不是原子的,除非您添加 LOCK 前缀。关于Linux内核,不用看spin_unlock。请参阅,在当前版本中,arch/x86/include/asm/atomic_32.h(它曾经是 include/asm-i386/atomic.h)。
-
@Blaisorblade,JAva 不在这里。 LOCKed 操作的成本是多少?
标签: performance atomic cpu-architecture lock-free