Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291688
  • 博文数量: 47
  • 博客积分: 568
  • 博客等级: 下士
  • 技术积分: 543
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-05 12:51
文章分类

全部博文(47)

文章存档

2012年(47)

分类: LINUX

2012-04-09 15:12:40

信号量:  
    自旋锁和信号量都是程序并发操作时解决互斥问题的基本手段。信号量是用于保护临界区的一种常用方法,它的使用方法与自旋锁类似。俩种实现机制不同,死锁的情况也各不相同。
 
与自旋锁相同:
    只用得到信号量的进程才能执行临界区代码。
与自旋锁不同:
    当获取不到自选锁量时,进程不会原地打转而会进入睡眠等待。
信号量死锁的一般情况分析:
    1 递归使用:
      即在同一个进程中,申请了信号量,但是在没有释放之前又再次申请,进程会一直睡眠,与自旋锁一样这种情况必定死锁。
    2 进程得到信号量后阻塞,睡眠:
      由于信号量在获取不到自旋锁后会进入睡眠等待,这种情况不会造成死锁。
    3 中断中申请信号量:
      由于信号量在获取不到自旋锁后会进入睡眠等待,中断处理函数不允许睡眠,如果睡眠,中断将无法返回。
    4 中断下半部申请信号量:
      中断下半部允许睡眠,这种情况不会造成死锁。
    5 俩个进程相互等待资源:
      例如:
          进程1获得信号量A,需要信号量B,在进程1需要信号量B之前进程2获得信号量B,需要信号量A。
     进程1、2因相互等待资源而死锁。
阅读(1581) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~