(一)内核锁的使用之自旋锁
来源:互联网 发布:php flash 上传 编辑:程序博客网 时间:2024/05/20 23:04
对于锁的使用,使用过的人会觉得比较简单,但是没有使用过的人来讲,可能对其了解就比较浅了,平时开发过程中使用锁及锁中断的时候较多,也积累了一些简单的经验给大家分享一下:
首先我们先来讨论一下自旋锁,所谓自旋锁,可以理解为就是原地打转,直到获取到对应的锁才退出,内核中对应的接口是:spin_lock()和spin_unlock()
使用场景:多个任务有可能对共享资源同时访问,这个时候需要进行互斥操作,可以使用本组接口来实现互斥,但是本人强烈不建议使用此接口进行互斥(内核也不建议),原因是如果一个任务正在访问临界资源,使用了本组接口,但是在spin_lock后,spin_unlock前来了中断,恰巧中断上下文中也会调用spin_lock来获取这个锁,这个时候就抓瞎了,中断上下文将永远获取不到那个锁了,因为中断优先级较高,在任务未释放锁之前进入到了中断上下文中,中断上下文中spin_lock将永远不会返回,从而死锁;所以建议使用spin_lock_irqsave和spin_unlock_irqrestore这一对接口,下方表格列出了两对自旋锁方法,当然内核中还有其他方法,但是不常用,就不在这里说明了。
使用注意事项:锁定时间一定要短,太长的话非常影响系统性能;还有就是自旋锁是非递归的,也就是说在spin_lock_irqsave()之后不能再有spin_lock_irqsave的操作,实际开发中我也确实犯过这样的低级错误。
自旋锁方法
方法
描述
spin_lock()
获取指定的自旋锁
spin_unlock()
释放指定的自旋锁
spin_lock_irqsave()
获取指定的自旋锁,同时保存本地中断状态,并禁止中断
spin_unlock_irqrestore()
释放指定的自旋锁,同时恢复本地中断状态
- (一)内核锁的使用之自旋锁
- imx6q内核之自旋锁
- Windows内核编程基础篇之使用自旋锁
- Linux 内核同步之自旋锁与信号量的异同
- Linux内核源码之自旋锁的实现
- 自旋锁的使用
- 内核同步方法之自旋锁
- 内核同步方法之读写自旋锁
- 内核同步之自旋锁和信号量
- 内核同步之自旋锁和信号量
- 内核同步之自旋锁和信号量
- LINUX内核之普通自旋锁
- Linux内核之自旋锁和信号量
- 内核自旋锁
- Linux内核自旋锁
- 内核自旋锁API
- 内核自旋锁spin_lock
- Linux内核自旋锁
- 混沌理论
- C++primer plus第六版课后编程题答案9.2
- boost准模板库date_period()(时间段使用 续1)时间段之间的关系运算
- shutdown
- java Map及Map.Entry详解
- (一)内核锁的使用之自旋锁
- 手动挡停车时挂档有技巧
- fatal error LNK1104: 无法打开文件“.\Debug/TCPServer.exe”
- eclipse操作技巧
- 自研跨平台px2d引擎
- java的不导入,直接使用类的全量名称
- 制动刹车片六个养护要点
- 微软2014实习生及秋令营技术类职位在线测试返回比赛列表
- EasyHook远程代码注入