Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99112
  • 博文数量: 24
  • 博客积分: 407
  • 博客等级: 一等列兵
  • 技术积分: 291
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-02 08:31
文章分类
文章存档

2012年(24)

我的朋友

分类: LINUX

2012-03-20 20:29:01

首先,我们要明确,尽量避免资源的共享,典型的便是全局变量。如果不可避免,可考虑信号量与自旋锁,这是没办法中的办法。

 

明确一个概念 临界区:任何指定的时刻,代码只能被一个线程执行。

 

下面是总结的自旋锁和信号量的使用规则,注意了:有的是“必须”,不这样做就是bug;有的是“尽量”,不这样做会带来性能下降。

 

中断上下文必须用自旋锁,因为使用信号量万一休眠,没法唤醒,记住中断没有唤醒机制,
 
拥有自旋锁的线程不能休眠,试想下你在厕所睡着了,别人怎么办,太不道德,
 
自旋锁必须在可能的最短的时间内拥有,因为你在厕所享受,别人在门外焦急等待,尽量减少占用时间是王道,
 
如果中断例程可能试图拥有自旋锁,则必须先禁止中断(其实内核为我们提供了相应的自旋锁版本),
 
如果可能休眠则必须用信号量,上面已解释,
 
如果临界区较长,尽可能使用信号量,这时使用自旋锁浪费处理器,
 
如果临界区较短,尽量使用自旋锁,因为信号量所导致的处理器切换照样也是一种浪费。
 
非抢占式单处理器自旋锁不做任何事情;抢占式单处理器自旋锁也就是关抢占 。
 
如果问题,欢迎讨论。
阅读(1721) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~