c - 内核 - 自旋锁与队列
c - kernel - spinlocks vs queues
我认为,无论提供多少文档,我都不明白为什么必须在内核上下文中等待自旋锁。
为什么没有特定队列的进程需要原子锁 counter/index 并且,在禁用抢占的情况下,当它们进入此列表时以及当此列表中的计数器降至 0 时对待它们, 返回主日程列表 ?
两种情况:
系统负载不足,可能自旋锁更快(取决于此时的锁并发);
系统负载过重,也许这个策略更快(不再等待)。
这里可能漏掉了一些很聪明的东西,希望大家理解一下。
谢谢
自旋锁主要用于(或互操作)不能阻塞/重新安排的上下文。它们只应在实际等待它们的可能性相对较低且锁不会持有太久的情况下使用。例如,假设一个中断处理程序(and/or 其他上下文)已经创建了一个数据结构并且需要 link 将其放入一个双重 link 列表中。这只需要几纳秒即可完成,并且与另一个进程发生冲突的可能性很低,但它必须具有原子效应:没有其他 cpu/thread 应该看到处于中间(部分 linked)状态的列表.
我认为,无论提供多少文档,我都不明白为什么必须在内核上下文中等待自旋锁。
为什么没有特定队列的进程需要原子锁 counter/index 并且,在禁用抢占的情况下,当它们进入此列表时以及当此列表中的计数器降至 0 时对待它们, 返回主日程列表 ?
两种情况:
系统负载不足,可能自旋锁更快(取决于此时的锁并发);
系统负载过重,也许这个策略更快(不再等待)。
这里可能漏掉了一些很聪明的东西,希望大家理解一下。
谢谢
自旋锁主要用于(或互操作)不能阻塞/重新安排的上下文。它们只应在实际等待它们的可能性相对较低且锁不会持有太久的情况下使用。例如,假设一个中断处理程序(and/or 其他上下文)已经创建了一个数据结构并且需要 link 将其放入一个双重 link 列表中。这只需要几纳秒即可完成,并且与另一个进程发生冲突的可能性很低,但它必须具有原子效应:没有其他 cpu/thread 应该看到处于中间(部分 linked)状态的列表.