Chinaunix首页 | 论坛 | 博客
  • 博客访问: 378243
  • 博文数量: 57
  • 博客积分: 2299
  • 博客等级: 大尉
  • 技术积分: 1109
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-27 23:12
文章分类
文章存档

2011年(4)

2010年(53)

分类: 嵌入式

2010-08-07 09:37:51

自旋锁与信号量的抉择方式:
1、当锁不能获取时,使用信号量的开销是进程上下文切换时间Tsw,使用自旋锁的开销是等待获取自旋锁的时间Tcs(由临界区的执行时间决定),如果Tcs比较小,则应使用自旋锁,若Tcs很大,则应使用信号量;
2、信号量所保护的临界区可包含可能引起阻塞的代码,而自旋锁则绝对要避免这种代码。因为阻塞意味着要进行上下文切换,如果进程被切换出去后,改进程将无法释放锁,在另一个进程试图获取自旋锁时,死锁就会发生。
3、信号量存在于进程上下文,因此,如果共享资源需要在中断或软中断情况下使用,则在信号量和自旋锁之间应该选择自旋锁。如果一定要是用信号量,则只能通过down_trylock()方式进行,不能获取便立即返回以避免阻塞。
获得信号量后没有禁止中断,如果中断函数中需要获得该信号量,则会造成死锁;
自旋锁在获得“锁”之前禁止中断,自旋锁的操作是原子的,照我的理解就是操作的是内核中的最小单位,不能被任何中断之类的操作所切割;
阅读(2477) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~