当前位置: 技术问答>linux和unix
中断处理函数中使用自旋锁的疑问
来源: 互联网 发布时间:2016-12-24
本文导语: 书上说“在中断处理程序中可以使用自旋锁” 那么,假设自旋锁锁定了一个临界区,而且一个进程正在持有该锁,此时发生中断,中断服务函数中又申请该自旋锁,那岂不是会造成死锁,因为中断服务函数在等待自...
书上说“在中断处理程序中可以使用自旋锁”
那么,假设自旋锁锁定了一个临界区,而且一个进程正在持有该锁,此时发生中断,中断服务函数中又申请该自旋锁,那岂不是会造成死锁,因为中断服务函数在等待自旋锁,但是进程将永远得不到释放自旋锁的机会。
就是这点搞不清楚,求解,谢谢。
那么,假设自旋锁锁定了一个临界区,而且一个进程正在持有该锁,此时发生中断,中断服务函数中又申请该自旋锁,那岂不是会造成死锁,因为中断服务函数在等待自旋锁,但是进程将永远得不到释放自旋锁的机会。
就是这点搞不清楚,求解,谢谢。
|
使用自旋锁不是死锁的原因,而是由于他获得资源后不能释放。如果没有保护和精心设计,任何排他的同步都可能造成死锁。
自旋锁确实在多处理器内核同步时使用较多,我想可能是由于自旋锁是个循环等待,一般效率很低,但如果自旋锁使用在多处理器间的资源保护,自旋锁被占有时,说明该资源正在被别的处理器访问,因为获得自旋锁前一定会禁止内核抢占,循环等待不会浪费太多时间,因而在单处理器资源保护使用信号量而多处理器使用自旋锁。
另外,占有一个资源不能释放的这种情况,不知道能不能称作死锁
自旋锁确实在多处理器内核同步时使用较多,我想可能是由于自旋锁是个循环等待,一般效率很低,但如果自旋锁使用在多处理器间的资源保护,自旋锁被占有时,说明该资源正在被别的处理器访问,因为获得自旋锁前一定会禁止内核抢占,循环等待不会浪费太多时间,因而在单处理器资源保护使用信号量而多处理器使用自旋锁。
另外,占有一个资源不能释放的这种情况,不知道能不能称作死锁