2017-06-02 28 views
0

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

+0

取决于使用的策略。循环赛是最简单的一个。 – 0andriy

回答

2

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

同样,对于其中的代码只是试图翻转“采取”有点简单化自旋锁,有没有任何保证。但是,某些硬件特性可以使特定内核比其他内核具有更容易的时间(如果它们共享相同的套接字)。

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

我再说一遍:如果2个不同的线程争夺一个锁,没有保证的顺序,他们将采取它并寻找一个是错摆在首位。