Semaphore和Mutex比较

Mutex即互斥锁。在北美的一些小办公室,常常能见到很小的男女公用的洗手间,这种洗手间只有一把钥匙,只有拿到了这个钥匙的人才可以进入洗手间。用完洗手间后,此人将钥匙释放,等待队列中的第一个人才可以获取钥匙进入洗手间。在这里,钥匙是mutex, 洗手间是不能被并行访问的受保护资源,Mutex只能被获取者释放。在java中,一般用synchronized(某个对象锁)来保证一段代码不会被并行运行。如果一个方法加了synchronized关键字,那么一个线程只有获取了该对象的对象锁才能执行这个方法,它等同于 fun() { synchronized(this) {...}} 

Semaphore则可以看成那种普通的洗手间。当洗手间满了,其他人就只能在外面等待。semaphonre最常见的用途是生产者-消费者场景。例如一个消息队列,经常会使用两个信号量,一个信号量指示消息队列是否满了,另一个指示消息队列是否空的。当多个producer往消息队列中put消息,并指示empty信号量为可用。一旦消息队列满了,full信号量能保证producer不再往队列中Put消息。consumer则get消息,并指示full信号量可用。一旦队列中不再有消息,empty信号量保证consumer不再get消息。信号量与Mutex最大的不同是,Mutex只能被acquire它的线程release, 可semaphore可以被不同的线程release

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值