免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5396 | 回复: 14

[内核同步] spin_lock死锁问题 [复制链接]

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
发表于 2012-06-13 17:15 |显示全部楼层
如果
spin_lock(&A);
spin_lock(&B);

spin_unlock(&A);
spin_unlock(&B);
在什么情况下会死锁?

为什么一般都说用:

spin_unlock(&B);
spin_unlock(&A);

论坛徽章:
0
发表于 2012-06-13 20:18 |显示全部楼层
如果是连着释放的话 哪个无所谓把  只是后者看上去比较符合工程学

论坛徽章:
0
发表于 2012-06-14 13:36 |显示全部楼层
回复 1# embeddedlwp

好问题。也在思考中。。。
   

论坛徽章:
0
发表于 2012-06-14 13:46 |显示全部楼层
正解!~

spongeliu 发表于 2012-06-13 20:18
如果是连着释放的话 哪个无所谓把  只是后者看上去比较符合工程学

论坛徽章:
0
发表于 2012-06-14 16:12 |显示全部楼层
好处就是日后维护方便,中间怎么加代码都没事。

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
发表于 2012-06-23 13:50 |显示全部楼层
本帖最后由 bensenq 于 2012-06-23 13:51 编辑

锁是为了在有并发的情况下进行保护,既然有两个锁那肯定是为了保护两个类竞争资源,因此通常来说不应该将两个锁交织在一起。

单就楼主的示例来说
  1. spin_lock(A)
  2. spin_lock(B)

  3. operations....

  4. spin_unlock(A)
  5. spin_unlock(B)
复制代码
  1. spin_lock(A)
  2. spin_lock(B)

  3. operations....

  4. spin_unlock(B)
  5. spin_unlock(A)
复制代码
这两者是完全一样的,因为这个时候两个锁保护的东西是一样的,想当于一把锁,也就是说A、B锁可以合并为一把锁。
  1. spin_lock(AB)

  2. operations....

  3. spin_unlock(AB)
复制代码
回复 1# embeddedlwp

   

论坛徽章:
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
发表于 2012-06-23 17:16 |显示全部楼层
我觉得这里有一种关系:上司做决定有必要经过下属同意吗?
假设CPU1:获得锁A----获得锁B----释放锁A----释放锁B
再假设A和B的一种从属关系,即B是资源A中的一个。
那么CPU2在CPU1释放锁A后获取A,所做的事情是释放这个资源a,如果CPU1自以为拥有锁B可以对资源b进行操作,而去改变b时(这时候b已经被释放了),那么就会导致错误

论坛徽章:
0
发表于 2012-06-23 17:55 |显示全部楼层
回复 7# amarant
锁之间是包含关系吗?指教

   

论坛徽章:
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
发表于 2012-06-23 19:39 |显示全部楼层
回复 8# wangzhen11aaa


    我假设的,如果两个锁毫无关系的话,应该是无所谓的

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2012-06-23 23:17 |显示全部楼层
回复 9# amarant

嗯,关键看这两个锁之间有什么关系没有。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP