我假设简单的自旋锁不会进入操作系统等待这个问题的目的。
我发现简单的自旋锁通常使用lock xchgorlock bts代替 来实现lock cmpxchg。
lock xchg
lock bts
lock cmpxchg
cmpxchg但是如果期望不匹配,是否会避免写入该值?那么失败的尝试不是更便宜吗cmpxchg?
cmpxchg
或者即使cmpxchg发生故障也会写入数据并使其他核心的缓存线无效?
这个问题类似于什么具体将 x86 缓存行标记为脏 - 任何写入,还是需要显式更改?,但它是特定的cmpxchg,而不是普遍的。
x86 assembly micro-optimization compare-and-swap cpu-cache
assembly ×1
compare-and-swap ×1
cpu-cache ×1
micro-optimization ×1
x86 ×1