首页 > 试题广场 >

下面哪种同步机制不能在中断上下文使用()

[单选题]
下面哪种同步机制不能在中断上下文使用()
  • 自旋锁
  • 信号量
  • 原子操作
  • 内存屏障
这个有点印象。信号量机制可能会导致进程自我阻塞,当进程在中断上下文中阻塞,一直不能开中断,且关闭中断期间CPU不例行检查中断信号(CPU每执行完一条指令都会检查是否有中断信号需要处理),会导致处理机一直被该进程占用。原语一气呵成的原子特性就是通过关中断和开中断两个特权指令实现的,这也就是原语不会被中断的原因
编辑于 2019-11-28 11:58:35 回复(1)
线程获取不到信号量的时候,会进入睡眠,直至有信号量释放出来时,才会唤醒睡眠的线程,进入临界区执行。
这个过程与调用频繁,处理速度快的中断上下文是冲突的,答案是B。
发表于 2019-09-03 19:46:28 回复(1)
中断处理程序就是中断上下文,只有进程才能才会被设置为“运行”和“睡眠”状态,中断上下文不是一个进程,是不可调度的,所以中断上下文中不能存在睡眠 中断上下文不可调度的原因是:中断的产生是很频繁的(比如时钟中断),如果为中断上下文维护一个调度对应的task_struct结构,那么这个结构会频繁地分配、回收,会导致整个系统的吞吐量下降,故中断上下文不可调度
发表于 2022-06-09 00:47:36 回复(0)
所以原子操作能中断?
发表于 2021-11-09 13:00:40 回复(0)
自旋锁是原子操作的一种应用,顾名思义,进程获取的共享数据被加锁时自己会死循环等待锁被释放,一般用于持续时间比较短的中断程序中。

信号量则是使用进程调度系统实现的一种锁,当资源被争用时进程会主动进入休眠状态等待唤醒,这样就不会像自旋锁那样空忙等待,所以一般在更长时间尺度的用户进程中会使用信号量。

由于信号量用到了进程调度的相关的睡眠唤醒等操作,所以它也只能用在进程代码上。而中断代码是没有调度的概念的
发表于 2023-03-07 21:06:42 回复(0)
中断上下文就是中断程序?信号量会导致自我阻塞,原语虽然也关中断,但是会很快执行完毕,程序能够继续进行下去
发表于 2022-04-07 21:59:53 回复(0)
信号量机制不可以在中断上下文使用
发表于 2021-12-24 15:31:51 回复(0)
中断上下文中不能睡眠
发表于 2019-11-16 21:25:49 回复(0)