比较和交换——如果 2 个处理器同时执行锁定怎么办?
Compare and swap - What if 2 processors execute locking simultaneous?
我在 https://en.wikipedia.org/wiki/Compare-and-swap 上读到有关 CAS 的文章,有一些疑问:
- 即使单个锁操作是在一条指令中实现的,但是如果 2 个线程 运行 在 2 个不同的处理器上,那么这 2 个指令可能会同时发生。这不是竞争条件吗?
- 我在
<Linux Kernel Development> 3rd
第 168 页看到了下面的句子。
because a process can execute on only one processor at a time
我对此表示怀疑,不确定它的字面意思。如果进程有多个线程,它们不能同时在多个处理器上 运行 怎么办?
有谁帮忙解释一下这些疑惑吗?谢谢
cpu 有一个内存缓存,通常每个所谓的缓存行大小为 64 字节。它将针对该大小的块做一些事情。特别是,在执行 lock cmpxchg 或类似操作时,执行此操作的硬件线程将与其他线程协商对内存的 64 字节部分的独占访问权。这就是它起作用的原因。
总的来说,你想读这本书:https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html
第 21 页解释了这个特殊位。
关于 LKD 报价,没有提供上下文。可以安全地假设它们意味着线程并且正在更新线程本地计数器。
我在 https://en.wikipedia.org/wiki/Compare-and-swap 上读到有关 CAS 的文章,有一些疑问:
- 即使单个锁操作是在一条指令中实现的,但是如果 2 个线程 运行 在 2 个不同的处理器上,那么这 2 个指令可能会同时发生。这不是竞争条件吗?
- 我在
<Linux Kernel Development> 3rd
第 168 页看到了下面的句子。
because a process can execute on only one processor at a time
我对此表示怀疑,不确定它的字面意思。如果进程有多个线程,它们不能同时在多个处理器上 运行 怎么办?
- 我在
有谁帮忙解释一下这些疑惑吗?谢谢
cpu 有一个内存缓存,通常每个所谓的缓存行大小为 64 字节。它将针对该大小的块做一些事情。特别是,在执行 lock cmpxchg 或类似操作时,执行此操作的硬件线程将与其他线程协商对内存的 64 字节部分的独占访问权。这就是它起作用的原因。
总的来说,你想读这本书:https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html
第 21 页解释了这个特殊位。
关于 LKD 报价,没有提供上下文。可以安全地假设它们意味着线程并且正在更新线程本地计数器。