linux - c - 内核 - 自旋锁与队列

标签 linux linux-kernel kernel queue spinlock

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

为什么没有一个特定的队列,其中的进程需要原子计数器/索引的锁定,并且在禁用抢占的情况下,将它们视为此列表中的内容,并且当此列表上的计数器降至 0 时,返回到主调度列表?

<小时/>

两种情况:

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

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

我可能会错过一些非常聪明的东西,我想理解它。

谢谢

最佳答案

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

关于linux - c - 内核 - 自旋锁与队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29010932/

相关文章:

tcp - 当 TCP 连接数超过 65000 时服务器发送 RST 给客户端~

linux - Linux使用什么函数来获取绝对路径?

java - 任何操作系统设置是否会影响 ExecutorService?

linux - 使用 CatchAll 过滤 Postfix 电子邮件帐户

c - 包含 char 数组作为成员的 Struct 数组 - C

linux - 如何根据文件名创建目录并使用 bash 脚本将该文件复制到目录的末尾?

c - 拦截系统调用

linux - 从 Linux 内核中的路径获取 inode

c - 内核模块上的 addr2line

linux - 编译和安装内核时出错?