在 linux 中获取自旋锁

spin lock acquiring in linux

我只是想知道,假设 PC 具有多核。三个不同的内核中有三个线程运行。 Thread(T1) 已在核心(C1) 中获取自旋锁(S) 并由T1 获取锁,同时核心C2 和C3 中的T2 和T3 线程运行 尝试获取锁并等待释放锁。一旦 T1 线程释放锁,哪个线程将获得 T2 或 T3 锁?我正在考虑 T2 和 T3 的相同优先级,并且同时在不同的内核中等待。

linux 内核使用 MCS 自旋锁。要点是服务员最终将自己添加到队列中。但是,如果有 2 个线程执行此操作,则无法保证谁先成功。

类似地,对于代码只是试图翻转 "taken" 位的更简单的自旋锁,没有任何保证。但是,某些硬件特性可以使某些内核比其他内核更容易使用(如果它们共享相同的插槽)。

您想阅读https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html

我再说一遍:如果 2 个不同的线程竞争一个锁,则无法保证它们获取锁的顺序,并且首先寻找一个是错误的。