这样会死锁吗?
来源: 互联网 发布时间:2016-06-10
本文导语: 我在书上看到自旋锁有可能出现死锁的状况,比如当前这个CPU获得了锁,然后发生中断,其中再次要求获得锁,这样就会引起死锁。 我的驱动程序里,在初始化的时候建立了一个内核线程,其中不定期的会去获得一...
我在书上看到自旋锁有可能出现死锁的状况,比如当前这个CPU获得了锁,然后发生中断,其中再次要求获得锁,这样就会引起死锁。
我的驱动程序里,在初始化的时候建立了一个内核线程,其中不定期的会去获得一个锁,然后处理,再释放。而在IOCTL的处理部分中一些操纵ye需要获得锁。那么如果内核线程获得了锁,这个时候发生了IOCTL系统调用,其中要求获得锁,这时会发生死锁吗?如果会该怎么解决尼?
分数不多,谢谢大家.
我的驱动程序里,在初始化的时候建立了一个内核线程,其中不定期的会去获得一个锁,然后处理,再释放。而在IOCTL的处理部分中一些操纵ye需要获得锁。那么如果内核线程获得了锁,这个时候发生了IOCTL系统调用,其中要求获得锁,这时会发生死锁吗?如果会该怎么解决尼?
分数不多,谢谢大家.
|
你说的没错 如果中断发生了 那就可能 自旋锁上死锁
不过 内核开发者 也不笨 他们提供了 接口 spin_lock_irqsave
这个函数 在加锁的同时 保存了 中断状态 同时禁中断
这样就不会 在内核执行路径 和 中断路径 (单CPU)下有竞争条件下死锁
注意 你别加锁之后 要执行好长时间的 (当前禁中断ing),spin_lock本身只
应用于加锁周期 不超过几个时钟周期。
不过 内核开发者 也不笨 他们提供了 接口 spin_lock_irqsave
这个函数 在加锁的同时 保存了 中断状态 同时禁中断
这样就不会 在内核执行路径 和 中断路径 (单CPU)下有竞争条件下死锁
注意 你别加锁之后 要执行好长时间的 (当前禁中断ing),spin_lock本身只
应用于加锁周期 不超过几个时钟周期。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。