免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9133 | 回复: 20
打印 上一主题 下一主题

在中断中是否可以用锁? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-09 17:28 |只看该作者 |倒序浏览
如题。中断中用锁是否会赞成panic.谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-09-09 19:48 |只看该作者
其实我也很疑惑这里
书上说:“如果被保护的共享资源需要在中断或软中断情况下使用,则在信号量和自旋锁之间只能选择自旋锁。”
我们试想一下,在中断处理例程中使用自旋锁,如果由于资源不能获得,程序将在一个小的循环内重复“测试并设置”操作;而中断处理例程不能被抢占,获得资源的进程得不到cpu,导致cpu就在这里永远打转。
我真的有点糊涂了

论坛徽章:
0
3 [报告]
发表于 2008-09-09 20:57 |只看该作者
原帖由 sep 于 2008-9-9 19:48 发表
其实我也很疑惑这里
书上说:“如果被保护的共享资源需要在中断或软中断情况下使用,则在信号量和自旋锁之间只能选择自旋锁。”
我们试想一下,在中断处理例程中使用自旋锁,如果由于资源不能获得,程序将在一 ...



自旋锁就是为多处理器引入的,可以用在中断中。
当中断中使用某个资源而尝试获取自旋锁时,如果获取不到,它会一直不断尝试自旋;与此同时,等待在其他CPU上运行的进程释放这个资源的自旋锁。也就是说,并不是其他获取这个自旋锁的进程一定要在中断处理的CPU上运行。

论坛徽章:
0
4 [报告]
发表于 2008-09-09 21:06 |只看该作者
原帖由 kissGNU 于 2008-9-9 20:57 发表



自旋锁就是为多处理器引入的,可以用在中断中。
当中断中使用某个资源而尝试获取自旋锁时,如果获取不到,它会一直不断尝试自旋;与此同时,等待在其他CPU上运行的进程释放这个资源的自旋锁。也就是说, ...

恩。我明白这一点。但如果是单核处理器呢
之前在用can控制芯片的驱动(我改为2.6内核,原先是2.4版本的,2.4内核里可以正常工作),在处理例程中就用到了自旋锁,结果引起panic。我认为由于2.4内核不可抢占,且为单处理器,故自旋锁退化为空操作。但是2.6内核是可抢占的,所以就出现我遇到的panic。

论坛徽章:
0
5 [报告]
发表于 2008-09-10 09:03 |只看该作者

回复 #4 sep 的帖子

你能举一个例子吗?什么情况下中断里面还会获得不了资源。

一般来讲,中断的唤起都是因为资源可以获得(例如通知磁盘读写完成,网络有数据包到达),如果在单核处理器上,还会有资源不能获得,那只能归咎于你的自旋锁操作错误,比如该使用spin_lock_irq的时候却使用的spin_lock

[ 本帖最后由 bluesky_jxc 于 2008-9-10 09:06 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-09-10 09:17 |只看该作者
原帖由 sep 于 2008-9-9 21:06 发表

恩。我明白这一点。但如果是单核处理器呢
之前在用can控制芯片的驱动(我改为2.6内核,原先是2.4版本的,2.4内核里可以正常工作),在处理例程中就用到了自旋锁,结果引起panic。我认为由于2.4内核不可抢占, ...


出问题了也不是锁的原因
写代码不可能假设是单处理器还是多处理器,所以该用的时候都得用,只是在单处理器情况锁不去真锁
如果是UP,那么自旋锁也会禁止抢占
锁的目的是为了避免并发,无论什么地方,比如线程锁为了多线程同时进入临界区
出问题肯定是用错了

论坛徽章:
0
7 [报告]
发表于 2008-09-10 09:41 |只看该作者
在但处理器上,中断里能不能有锁?哪种锁?我记得不能用吧

论坛徽章:
0
8 [报告]
发表于 2008-09-10 09:43 |只看该作者
原帖由 bluesky_jxc 于 2008-9-10 09:03 发表
你能举一个例子吗?什么情况下中断里面还会获得不了资源。

一般来讲,中断的唤起都是因为资源可以获得(例如通知磁盘读写完成,网络有数据包到达),如果在单核处理器上,还会有资源不能获得,那只能归咎于你 ...

别见笑,我修改的那个can驱动原先就是这样设计的。我也认为那真的是够糟糕的

论坛徽章:
0
9 [报告]
发表于 2008-09-10 09:44 |只看该作者
原帖由 eveson 于 2008-9-10 09:41 发表
在但处理器上,中断里能不能有锁?哪种锁?我记得不能用吧

LDD3上明确说是可以用的

论坛徽章:
0
10 [报告]
发表于 2008-09-10 09:47 |只看该作者
原帖由 flw2 于 2008-9-10 09:17 发表


出问题了也不是锁的原因
写代码不可能假设是单处理器还是多处理器,所以该用的时候都得用,只是在单处理器情况锁不去真锁如果是UP,那么自旋锁也会禁止抢占
锁的目的是为了避免并发,无论什么地方,比如 ...

单处理器的话,如果内核可抢占,也会真锁的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP