c - 内核 - 自旋锁与队列

c - kernel - spinlocks vs queues

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

为什么没有特定队列的进程需要原子锁 counter/index 并且,在禁用抢占的情况下,当它们进入此列表时以及当此列表中的计数器降至 0 时对待它们, 返回主日程列表 ?


两种情况:

这里可能漏掉了一些很聪明的东西,希望大家理解一下。

谢谢

自旋锁主要用于(或互操作)不能阻塞/重新安排的上下文。它们只应在实际等待它们的可能性相对较低且锁不会持有太久的情况下使用。例如,假设一个中断处理程序(and/or 其他上下文)已经创建了一个数据结构并且需要 link 将其放入一个双重 link 列表中。这只需要几纳秒即可完成,并且与另一个进程发生冲突的可能性很低,但它必须具有原子效应:没有其他 cpu/thread 应该看到处于中间(部分 linked)状态的列表.