Semaphore和Mutex之间的区别
在操作系统中, semaphore 和 mutex 是两种用于提供同步服务的内核资源。一个semaphore是一个整数变量,而一个mutex是一个对象。阅读这篇文章,了解更多关于semaphore和mutex的信息,以及它们之间的区别。
什么是semaphore
Semaphore 是一种信号机制。它基本上是一个整数变量。一个semaphore使用两种操作,即 等待 和 信号 来实现进程同步。因此,等待和信号操作可以修改semaphore。有两种类型的信号灯,即 计数信号灯 和 二进制信号灯。
计数信号(Counting Semaphore)是一种具有整数值和不受限制的值域的信号类型。计数信号主要用于资源访问的协调,其中信号的计数是可用资源的数量。
另一方面,二进制信号灯与计数信号灯类似,但是它的值被限制为0和1。因此,二进制信号灯的等待操作只有在信号灯为1时才有效,而信号操作在信号灯值为0时才有效。
什么是Mutex
Mutex 是一种锁定机制。它基本上是一个相互排斥的对象,可以同步资源的访问。Mutex在程序开始时被定义为一个唯一的名字。
一个Mutex可以确保多个程序线程不能同时获得Mutex。一个程序线程只有在退出关键部分时才会释放Mutex。因此,当Mutex被锁定时,进程被保留在队列中,只有在Mutex被解锁后才能被访问。
现在,让我们详细讨论一下semaphore和mutex之间的区别。
semaphore和互斥的区别
下表强调了semaphore和mutex之间的所有重要区别。
S.No. | semaphore | mutex |
---|---|---|
1. | 它是一种信号机制。 | 它是一种锁定机制。 |
2. | 它是一个整数变量。 | 它是一个对象。 |
3. | 可以使用 “等待 “和 “信号 “操作来修改信号灯。 | 它是由请求或释放资源的那个进程(仅)修改的。 |
4. | 4.该进程将不得不 “等待”,直到semaphore的计数高于0。 | 如果mutex被锁定,那么该进程将不得不等待。 |
5. | 如果没有可用的资源,进程要求需要执行的资源必须’等待’。 | 当mutex被锁定时,该进程被保留在一个队列中。只有在mutex被解锁后才能被访问。 |
6. | 多个程序线程可以用一个信号灯来使用。 | 多个程序线程可以在mutex中使用(但不能同时使用)。 |
7. | 7.semaphore的值可以被任何释放或获取资源的进程改变。 | 对象上的锁只能由获得该锁的进程来释放。 |
8. | 有不同种类的信号灯。计数信号和二进制信号。 | 它没有任何子类型。 |
9. | 9. 信号的值可以通过 “等待 “操作和 “信号 “操作来改变。 | 该对象要么被锁定,要么被解锁。 |
10. | 10.如果所有的资源都被使用,进程就被占用。 | 如果该对象已经被锁定,那么请求资源的进程将等待。 |
11. | 请求资源的进程使用 “等待 “操作,并阻止自己,直到semaphore的计数大于1。 | 在锁被释放之前,它将被系统排队。 |
结论
在这里你应该注意到的最重要的区别是,信号灯是一种信号机制,而突变体是一种锁定机制。