【问题标题】:spin lock acquiring in linuxlinux中的自旋锁获取
【发布时间】:2017-06-04 01:34:32
【问题描述】:

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

【问题讨论】:

  • 取决于使用的策略。 Round-Robin 是最简单的一种。

标签: multithreading linux-kernel spinlock


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多