当前位置: 移动技术网 > 科技>操作系统>Linux > semaphore(信号量), event(事件), lock/mutex(锁), condition的区别

semaphore(信号量), event(事件), lock/mutex(锁), condition的区别

2019年06月24日  | 移动技术网科技  | 我要评论

长春招标,公安部党委书记,鲤鱼的做法大全

semaphore: 标记是否存在可用资源

  1. 没有所属概念,使用较为随意
  2. 在使用过程中,由于较为随意,所以容易出现一些问题:
    • 意外释放: a和b都打算使用同一个信号量,但是在编写b的过程中,忘记申请信号,直接释放
    • 递归死锁: a申请了信号,a的子程序仍然要继续申请
    • 任务死亡导致死锁: a申请到了信号,但是没有释放就挂了
    • 优先级反转: a和c都需要信号量,此时c申请到了信号。但是a优先级高于c,所以a抢占c,但因为需要信号,所以重新调用c,a阻塞。而此时b优先级高于c,低于a,会抢占c
  3. 信号量更多用于同步(通知某一方可以执行)

lock/mutex(mutual exclusion): 标记某方是否可以申请相关资源

  1. 有所属概念,谁拥有,谁释放。相当于对semaphore添加了一些使用规则,相较于semaphore更安全
  2. 不同的系统实现不同,因此对于semaphore中出现的问题,解决的力度也不一样
  3. 锁更多用于保护资源,防止不一致

condition: 当满足一定条件,则通知相关方可以申请lock/mutex

event: 标记某件事情的发生,所需方可以进一步操作。其可看做是信号量的进一步发展

参考资料



difference between binary semaphore and mutex
what is mutex and semaphore in java ? what is the main difference?
lock, mutex, semaphore… what's the difference?

mutex vs. semaphores – part 2: the mutex

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网