比较和交换 - 如果2个处理器同时执行锁定怎么办?

时间:2016-08-13 07:39:44

标签: multithreading linux-kernel locking compare-and-swap

我在https://en.wikipedia.org/wiki/Compare-and-swap中读到了CAS,并有些疑惑:

    1. 即使在单个指令中实现单个锁定操作,但如果2个线程在2个不同的处理器上运行,则2个指令可能同时发生。这不是竞争条件吗?
    1. 我在<Linux Kernel Development> 3rd第168页看到了以下句子。
    2.   

      因为进程一次只能在一个处理器上执行

      我对此表示怀疑,不确定这是否意味着它的字面意思。如果进程有多个线程,它们一次可以在多个处理器上运行怎么办?

有人帮忙解释这些疑惑吗?感谢。

1 个答案:

答案 0 :(得分:2)

cpu具有内存缓存,通常为每个所谓的缓存行64字节大小。它会对那个大小的块做一些事情。特别是,在执行锁定cmpxchg或类似操作时,执行此操作的硬件线程将协商对其他线程的64字节内存部分的独占访问。这就是它起作用的原因。

一般来说,您想阅读本书:https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html

第21页解释了这一特定位。

关于LKD报价,没有提供上下文。可以安全地假设它们意味着线程并且正在更新线程本地计数器。