我认为,无论有多少可用文档,我都不明白为什么必须在内核上下文中等待自旋锁。
为什么没有一个特定的队列,其中的进程需要原子计数器/索引的锁定,并且在禁用抢占的情况下,将它们视为此列表中的内容,并且当此列表上的计数器降至 0 时,返回到主调度列表?
<小时/>两种情况:
系统负载不足,也许自旋锁更快(取决于此时的锁并发量);
系统负载严重,也许这个策略更快(不再等待)。
我可能会错过一些非常聪明的东西,我想理解它。
谢谢
最佳答案
自旋锁主要用于无法阻止/重新调度的上下文(或与之互操作)。仅应在实际等待它们的可能性相对较低且锁不会保持很长时间的情况下使用它们。例如,假设中断处理程序(和/或其他上下文)已经创建了一个数据结构并且需要将其链接到双向链表中。这只需要纳秒即可完成,并且与另一个进程发生冲突的可能性很低,但它必须具有原子效果:其他 cpu/线程不应该看到处于中间(部分链接)状态的列表。
关于linux - c - 内核 - 自旋锁与队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29010932/