Chinaunix首页 | 论坛 | 博客
  • 博客访问: 112502
  • 博文数量: 57
  • 博客积分: 629
  • 博客等级: 上士
  • 技术积分: 405
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-15 10:49
文章分类

全部博文(57)

文章存档

2012年(25)

2011年(32)

分类: LINUX

2011-10-27 14:35:40

“休眠”对进程意味着什么?当一个进程被置入休眠,它会被标记为一种特殊状态并从调度器的运行队列中移走,直到某些情况下修改了这个状态,进程才会在任意CPU上调度,也即运行该进程。对Linux设备驱动程序来讲,如何将一个进程以一种安全的方式进入休眠是很重要的。LDD3上介绍了两个原则:
 
一、不要在原子上下文中进入休眠。对休眠来说,驱动程序不能在拥有自旋锁、seqlock或者RCU锁时休眠。我是这样理解的:如果进程A拥有自旋锁,但此时休眠,就会让出CPU,调度器让进程B执行,如果此时B也需获取锁,但A拥有了自旋锁没有释放,B就会在那里A自旋,造成死锁。
二、我们通常无法知道是否还有其它进程在同一事件上休眠,这个进程可能会在我们之前被唤醒并将我们等待的资源拿走,所以要检查等待条件是否真正为真。
阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~