linux - 代码持有信号量可以被抢占是什么意思
问题描述
我正在阅读罗伯特爱书,对这条线有点困惑。代码持有信号量可以被抢占是什么意思?
如果在临界区执行代码时访问用户空间应用程序具有的相同变量发生中断,那么用户空间应用程序可以被抢占吗?
如果我的上述理解是正确的,那么当用户空间应用程序处于临界区时,除了自旋锁之外没有其他替代方法可以禁用中断吗?
那么信号量在 OS 的上下文中有什么用呢?当用户应用程序处于临界区时,任何时候都可能发生中断,为了避免中断干预,我们需要一直使用自旋锁。
解决方案
代码持有信号量可以被抢占是什么意思?
这意味着当前在其临界区中运行的进程可以抢占为同步而持有一些锁。理想情况下,中断具有最高优先级,因此除非您禁用该处理器内核上的中断,否则正在运行的进程可能会被抢占,并且在进程处于其临界区时可能会发生这种情况。
虽然有多个 spin_lock_XXX api 来禁用中断,但您可能希望使用spin_lock_irqsave,因为它将中断标志保存在该内核上并在释放锁定时恢复它们。
推荐阅读
- python - 哪种方式最好读取镶木地板文件以作为 dask 数据帧处理
- performance - 有没有办法在读取多个文件时并行化 spark.read.load(string*) ?
- javascript - 套接字断开后如何显示消息
- twig - 如何获取给定类别的文章网址?
- javascript - 使计算属性全局可用
- keycloak - keycloak 上是否存在任何 REST API 来管理没有管理员 api/帐户的单个用户的帐户详细信息?
- python-3.x - pyspark 具有现有列字符串条件的新列(带有特殊字符)
- python - Python/Pandas - 我怎样才能只保留外连接的父数据框?
- wpf - 动态资源合并不将样式应用于第一个控件
- android - 为什么在android中单击按钮时编辑文本返回空字符串?