linux-kernel – 为什么自旋锁在单处理器(unicore)系统中不起作用?

我知道自旋锁与spining一起工作,存在不同的内核路径,并且内核是先发制人的,那么为什么自旋锁在单处理器系统中不起作用呢? (例如,在 Linux中)
如果我理解你的问题,你就会问为什么自旋锁在单核机器上是个坏主意.

它们仍然可以工作,但可能比真正的线程睡眠并发更昂贵:

当你使用自旋锁时,你基本上断言你认为你不必等待很长时间.您所说的是,您认为使用繁忙的循环维护处理器时间片比将线程休眠和上下文转移到另一个线程或进程的成本更好.如果你需要等待很短的时间,你可以睡觉并且几乎立即重新唤醒,但是下降和降低的成本比等待的成本更高.

这在多核处理器上更可能是正常的,因为它们比单核处理器具有更好的并发性配置文件.在多核处理器上,在循环迭代之间,其他一些线程可能已经处理了您的先决条件.在单核处理器上,其他人不可能帮助你 – 你已经锁定了唯一的核心处理器.

这里的问题是,如果你等待或睡在一个锁上,你暗示系统你还没有你需要的所有东西,所以它应该做一些其他的东西,然后再回到你身边.使用自旋锁,你永远不会告诉系统这个,所以你把它锁起来等待其他事情发生 – 但同时,你把整个系统都拿起来,所以别的东西不会发生.

相关文章
相关标签/搜索