免费注册 查看新帖 |

Chinaunix

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

所有的自旋锁等待在本质上都是不可中断的?LDD3 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-13 19:03 |只看该作者 |倒序浏览
今天看LDD3时自旋锁那张提到:
所有自旋锁等待在本质上都是不可中断的,一旦调用了spin_locd,在获得自旋锁之前都是处于自旋状态。”
......
"想象一会儿你的驱动请求一个自旋锁并且在它的临界区里做它的事情. 在中间某处, 你的驱动失去了处理器. 或许它已调用了一个函数( copy_from_user, 假设) 使进程进入睡眠. 或者, 也许, 内核抢占发威, 一个更高优先级的进程将你的代码推到一边. 你的代码现在持有一个锁, 在可见的将来的如何时间不会释放这个锁. 如果某个别的线程想获得同一个锁, 它会, 在最好的情况下, 等待( 在处理器中自旋 )很长时间. 最坏的情况, 系统可能完全死锁."

我觉得如果进程在等待自旋锁时如果不可中断的话,那么上面介绍的这种情况肯定是死锁,不会存在最好或是最坏情况了。是不是这样呢?

那么本质上都是不可中断的,到底是可中断还是不可中断呢?


谁能解释一下呢?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-04-13 19:23 |只看该作者
想你上面说的那样,肯定是死锁了,所有编程时要主要,获取自旋锁千万不要sleep

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
3 [报告]
发表于 2011-04-13 19:54 |只看该作者
回复 2# zhy-linux


    那个睡眠的程序回来了释放锁就不会死锁了吧
最坏的情况应该是说,自己这个cpu请求被自己的持有的锁然后就会死锁把

论坛徽章:
0
4 [报告]
发表于 2011-09-21 17:56 |只看该作者
是不是多核情况下,睡眠的进程可能醒来并释放锁啊?

论坛徽章:
0
5 [报告]
发表于 2011-09-25 21:34 |只看该作者
本帖最后由 SharkBones 于 2011-09-26 15:41 编辑

第一个问题,最好情况:获取锁的进程A比当前进程优先级低-》进程A获取不到锁-》超出时间片-》被调度出-》调度到持有锁的进程-》释放锁-》调度到进程A-》获得锁并执行。
最坏情况,若获取锁的进程A比当前进程优先级高,就会出现死锁的情况。
第二个问题:可能会发生的就一定会发生,为了避免问题一的情况,所以spinlock是不可睡眠的。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
6 [报告]
发表于 2011-09-26 10:31 |只看该作者
可中断, 但是中断返回时还会回来自旋。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
7 [报告]
发表于 2011-09-26 14:14 |只看该作者
本帖最后由 asuka2001 于 2011-09-26 14:25 编辑

这里是LDD3的英文原文:
Therefore, the core rule
that applies to spinlocks is that any code must, while holding a spinlock, be atomic.
It cannot sleep; in fact, it cannot relinquish the processor for any reason except to
service interrupts
(and sometimes not even then).

我读着怎么这么纳闷,结果LZ的"中断"好象有点歧义,我就说有点不对劲!
我觉得用阻塞或者睡眠之类的比较无歧义!

论坛徽章:
0
8 [报告]
发表于 2011-09-26 15:40 |只看该作者
这里是LDD3的英文原文:
Therefore, the core rule
that applies to spinlocks is that any code must, w ...
asuka2001 发表于 2011-09-26 14:14


同意,LZ的第二个问题应该想是问spinlock是不是可以睡眠的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP