我只是想知道,假设PC有多核心。有三个线程在三个不同的核心中运行。线程(T1)已经获得核心(C1)中的自旋锁(S)并且通过T1获得锁定,同时在核心C2和C3中运行的T2和T3线程尝试获取锁并等待锁的释放。一旦T1线程释放锁定哪个线程将获得锁定T2或T3?我正在考虑T2和T3的相同优先级,同时也在不同的核心等待。
答案 0 :(得分:2)
linux内核使用MCS自旋锁。要点是服务员最终将自己添加到队列中。但是,如果有2个线程执行此操作,则无法保证谁将首先成功。
类似于更简单的自旋锁,其中代码只是试图翻转"采取"有点,没有任何保证。但是,某些硬件特性可以使某些内核比其他内核更容易(如果它们共享相同的套接字)。
您想阅读https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html
我再说一遍:如果有两个不同的线程争夺一个锁,那么就没有保证他们会接受它的顺序,并且首先找一个是错的。