Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1259073
  • 博文数量: 85
  • 博客积分: 10051
  • 博客等级: 上将
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(85)

文章存档

2011年(15)

2010年(37)

2009年(17)

2008年(16)

我的朋友

分类: LINUX

2009-06-14 17:45:30

题记:也许真的老了,半夜coding的质量已经退化了。。。也许还没老,因为半夜还能看出哪里死锁了...

1. 法则(待补充):
(1) 读写锁不能嵌套
(2) 读锁不能升级为写锁
(3) 当进程上下文,bh上下文,中断上下文共用临界区域时,要证只在最高优先级的情况下持有锁

2. 法则之外:
(1) 除了锁,还有别的同步方法。锁不是最高效的。
(2) 如果在循环中反复地加锁解锁,或者增减使用/引用计数时,小心地管理每一个循环出口。
(3) 在检查死锁问题中,二分printk的方法依然很有效。
(4) 2.6的高版本内核中,有spin lock的检查模块。

最近发现的几个死锁问题:
循环中逻辑较复杂地反复加锁解锁,写挂了...这个属于比较傻的问题,这里就不再详述了。

进程上下文和软中断上下文共同使用了一块临界区,进程上下文如果hold住spin lock之后,被中断打断,中断结束后在同一个核上调用了软中断,而软中断在玩命等这个倒霉的spin lock被释放,遥遥无期。。。那一个核就此不再干活。[以前与这个问题类似的一个死锁问题是proc依靠timer更新,但读取的时候是在进程上下文,加锁保护不当,挂掉。]


阅读(1198) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~