内核中的自旋锁
Linux中的自旋锁,标准用法是spin_lock(加锁)、spin_unlock(解锁),可是内核中往往不是这么用的,这是为什么呢?这封GeeP博文说的非常清楚http://www.geeksofpune.in/drupal/?q=node/75 线程可以分为一般线程和irq线程,Linux使用irq处理中断问题.一般线程没什么可说的,irq线程运行在一个较高的特权模式下,可以抢占CPU.基于这种情况,使用spin_lock会造成死锁.比如:一般线程获得锁,irq线程此时进行抢占,试图上锁.但是锁已经被一般线程获得,irq线程无法获得锁,可是 之 1. 加锁不使用spin_lock,而采用spin_lock_irqsave.后者在x86平台上,可以理解为执行了如下操作:对于当前使用的CPU,保存寄存器状态,关硬件中断,试图获得锁.这种方法 2. 加锁不使用spin_lock,而采用spin_trylock,特别是irq线程一定要这么使用.该函数尝试获得锁,如果获得返回成功(非0值),否则返回失败.因此,即使irq线程进行了抢占, 至于具体的使用方法,参见GeeP的博文. 本文出自 “小强技术博客” 博客,请务必保留此出处http://superpopb2b.blog.51cto.com/786164/718534 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |