互斥体和信号量之间的区别

  • 互斥体和信号量之间的区别已关闭评论
  • A+
所属分类:语言

互斥与信号量

互斥锁类似于房间的单个键。拥有钥匙的人(类似于线程)是唯一可以进入房间的人。具有访问权限的人然后将必须将密钥放弃给下一个排队的人。因此,互斥锁只能由获取它的线程释放。

互斥锁通常用于序列化对可重入代码段的访问,重入代码段是一种代码,该代码不能同时由多个线程执行。一个节只允许一个线程。这迫使队列中的其他线程等待。在线程获得访问权限之前,它必须等到线程放弃该节之前。

在互斥锁中使用相同的类比,信号量是可以访问具有相同锁具的相同数量房间的相似键的数量。信号量或信号量计数的值将取决于进入或离开房间的人数(线程)。如果有5个房间并且它们全部被占用,则信号量为零。如果有两个离开房间,则计数为2,并将两个键分配给队列中的下两个。

话虽如此,信号量可以由任何线程或进程同时发信号,对于需要同步的应用程序是理想的选择。但是,基于最大信号量计数,信号量可用于有效限制公共资源的并发用户数。

因此,基本上,互斥锁可以视为值为1的信号量。

信号量的减少和增加取决于线程是请求访问公共资源还是离开该节。

从理论上讲,互斥量和(二进制)信号量在语义上是相似的。互斥量的实现可以使用信号量来完成,反之亦然。但是,从实际意义上讲,它们可能有所不同。

互斥对象旨在仅用于互斥,二进制信号量旨在用于互斥和事件通知。尽管它们在实现和一般语义方面非常相似,但使用方式却有所不同。

1. Mutex通常用于序列化对公共资源的访问,而信号量是许多并发访问。

2. Mutex就像一个信号量,计数为1。
3. Mutex仅允许单个线程访问,而信号量可以由任何线程或进程同时发信号。

4.信号量是同步的理想选择,通常用于事件通知和互斥,而互斥仅用于互斥。

 

分博士