如果已经禁止了中断,不能休眠。 原因为什么
自旋锁,或原子上下文,休眠的后果?
------解决方案--------------------------------------------------------
一旦假如,检查不仔细,在原子上下文(如自旋锁中),不小心引入休眠的代码。很可能会出现什么后果呢?
这样可能就会出现死锁,具体讲,如果原子上下文中,例如自旋锁中你引入了休眠,由于你在原子上下文前进行了一个获取自旋锁的操作,理论上要求你立马释放锁,所以,要求不能睡眠。如果你在自旋锁中你引入了休眠,那么这个原子上下文就会休眠,而假如此时有另一个进程被执行,同时该进程第一步是获取在休眠进程中获取的同一个自旋锁,这样,你现在的进程就无法获取自旋锁而一直自旋着,这样就进入死锁状态。所以,原子上下文不能休眠。
------解决方案--------------------------------------------------------
第三个问题:
原子上下文 可否被中断
如,自旋锁
在第三个问题:
原子上下文 可否被中断
如,自旋锁
在执行原子上下文时, 中断会响应??
解答下,如果你没加其他什么操作,执行原子上下文时,中断会相应的,但是你会发现,由于原子操作不能睡眠,是很快完成的,所以如果原子上下文出现中断,这样原子操作就被打断了,这样是不好的。所以,我们在驱动设计时候,在原子上下文有一个关中断的操作,当原子上下文结束时候,再开中断,这样在原子上下文做关闭和打开中断的操作就是为了避免在执行原子上下文时, 中断会响应。