- 论坛徽章:
- 0
|
原帖由 xiegang112 于 2009-2-7 20:01 发表 ![]()
单cpu抢占模式下,spin_lock定义是禁止抢占。在网上查了些文章,大概意思是说如果如果不禁止抢占,会造成死锁。但是我觉得理论上应该不会造成死锁。一个进程获得了资源的自旋锁,在访问资源期间,被其他进程抢占。新的进程为了访问该资源,去获得该锁。此时形成了一个竞态条件。如果没有外界干预,就是死锁现象。但是,因为存在中断,他可能打断新进程的忙等,老进程有机会获得cpu,完成对资源的访问并释放锁,从而避免死锁。
所以,我觉得单cpu spin_lock中禁止抢断并不会造成死锁,而是有可能引起性能的下降。不知道理解是否正确?
谢谢
我觉得你这句话:
"所以,我觉得单cpu spin_lock中禁止抢断并不会造成死锁,而是有可能引起性能的下降。"
是对的!
只是kernel不可能这样去冒险降低系统性能,所以为了万无一失,有这样一对函数:
- spin_lock_irqsave(lock, flags);
- spin_unlock_irqrestore(lock, flags) ;
复制代码
这样把中断也屏蔽掉了,就不会发生"引起性能的下降". |
|