c - 内核 - 自旋锁与队列

时间:2015-03-12 13:20:11

标签: linux linux-kernel kernel queue spinlock

我认为,无论有多少文档可用,我都不明白为什么必须等待内核上下文中的自旋锁。

为什么没有一个特定的队列,其中进程需要使用原子计数器/索引进行锁定,并且在禁用抢占的情况下,当它们进入此列表时处理它们,并且当此列表中的计数器降至0时,回到主要时间表?


两种情况:

  • 系统欠载,也许自旋锁更快(取决于此时的锁并发);

  • 系统负载很重,也许这个策略更快(不再等待)。

我可能会想念一些非常聪明的东西,我想了解它。

谢谢

1 个答案:

答案 0 :(得分:0)

Spinlocks主要用于无法阻止/重新安排的上下文(或与之互操作)。它们只应在实际等待它们的可能性相对较低且锁定时间不长的情况下使用。例如,假设中断处理程序(和/或其他上下文)已创建数据结构,并需要将其链接到双向链接列表。这只需要几纳秒才能完成,并且与另一个进程冲突的可能性很低,但它必须具有原子效应:没有其他cpu /线程应该看到中间(部分链接)状态的列表。