Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3616
  • 博文数量: 4
  • 博客积分: 120
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-03 02:44
文章分类
文章存档

2011年(1)

2009年(2)

2008年(1)

我的朋友
最近访客

分类: LINUX

2009-11-05 08:21:33

几个重要的同步机制:spinlock,semaphore,disable/enable deferrable function, disable/enable local interrupt.
当开发者需要考虑用哪种机制或哪几种机制来进行同步的时候,一般考虑点有3个:
1.可能产生问题的资源在哪些地方被访问,即在exception,interrupt handler 上半部还是下半部。依据杀伤力排列:上半部 > 下半部 > exception。杀伤力大小是依据其对系统整体性能造成的影响来评判的,绝对公平,童叟无欺。那么制服这些不同杀伤力的同步机制也排个序:local interrupt disable > deferrable function disable > semaphore
2.先解决UP在来考虑MP
3.解决UP的时候,一般是要在杀伤力低些的代码中做文章。即在杀伤力低的代码中加入杀伤力高的同步机制即可。晕了?举个例子:假如A资源会被exception和底半步访问,那么你需要处理的事情便是在exception的代码中加入deferrable function disable同步机制,打完收工,简单吧!另外一种情况,只有在同一种杀伤力中被访问,好了这种情况更加简单,都加!“同一种”理解为在同一个level,不同的地方在访问。如果是同一种且只有一个地方,嗯。。。需要考虑考虑。(interrupt handler和tasklet UP和MP不用管,自己是serialized,如果是softirq,在MP的时候需要加spinlock)。
第1个问题很好解决,开发者在开发的时候一般能够确定某个资源在哪些地方会被访问。然后由3+2即可解决很多的同步机制的疑难杂症。

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