多线程--关于信号量和互斥锁的比喻

这阵子学习多线程方面的知识发现自己对于一些基本概念都还不清楚。

比如信号量和互斥锁这块。看网上的资料越看越乱。偶然看到一篇对信号量和互斥锁的形象比喻,拷贝下来供自己学习学习。


这个比喻是解释信号量(semaphore)和互斥锁(mutex)的区别。该比喻最初来自这里,我先翻译一下,然后对它做个改进。

互斥锁是一把公共厕所的钥匙。一个人使用厕所的时候可以拿到这把钥匙,用完之后把这把钥匙交给排队的下一个人。

信号量是没有人使用的厕所的钥匙数量,所有厕所的钥匙都一样。比如有4个厕所有相同的钥匙和锁。信号量的值就是钥匙的数量,一开始是4。当进来一个人的时候数量就是少一个,如果4个厕所都满了,信号量就成0了,出去一个人就增加1,并把钥匙交给排队的下一个人。

这个比喻并不是太好,尤其是它无法解释 二元(binary)信号量和互斥锁的区别!我把这个比喻做了改进。互斥锁的比喻还是和上面一样,需要指出的是,当你拿到那把钥匙的时候你就是它的拥有者(owner),别人是无法打开厕所门的。

而信号量到底是什么呢?它就是一个大的公共厕所,里面有若干个位置,外面的大门口有一个可以翻动牌子写着“已满”和“可用”,当里面还有空的位置的时候,进去的人不用翻动这个牌子,直到没有位置时最后一个进去的人必须把它设成“已满”,这时后面的人必须排队等候,然后出去的人必须把牌子翻到“可用”,如果需要的话。

很好理解对嘛?那么它怎么解释二元信号量呢?也就是当这个厕所里面只能容纳一个人的时候,每个人进去的时候都要把门口的牌子翻到“已满”,出去的时候翻到“可用”。它和互斥锁的区别马上就可以看出来了,翻动的牌子在外面可以被别人翻的,而锁住的锁只有拿钥匙的人才可以开!

当然了,信号量之所以翻译成“信号”,还是有道理的,因为它(厕所门口的牌子)标示的是资源(厕所空位)的状态,而互斥锁就是锁,它实实在在地锁住了资源。这在生产者消费者的情况下区别更明显。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值