Mutex vs Semaphore: quelle est la différence?

Table des matières:

Anonim

Qu'est-ce que le sémaphore?

Le sémaphore est simplement une variable non négative et partagée entre les threads. Un sémaphore est un mécanisme de signalisation, et un thread qui attend sur un sémaphore peut être signalé par un autre thread. Il utilise deux opérations atomiques, 1) attente et 2) signal pour la synchronisation du processus.

Un sémaphore autorise ou interdit l'accès à la ressource, ce qui dépend de la façon dont elle est configurée.

Dans ce tutoriel, vous apprendrez:

  • Qu'est-ce que Mutex?
  • Utilisation du sémaphore
  • Utilisation de Mutex
  • Différence entre sémaphore et mutex
  • Idées fausses courantes sur Mutex et sémaphore
  • Avantages du sémaphore
  • Avantages de Mutex
  • Inconvénient des sémaphores
  • Inconvénients de Mutex

Qu'est-ce que Mutex?

La forme complète de Mutex est un objet d'exclusion mutuelle. C'est un type spécial de sémaphore binaire utilisé pour contrôler l'accès à la ressource partagée. Il comprend un mécanisme d'héritage de priorité pour éviter les problèmes d'inversion de priorité étendue. Il permet aux tâches de priorité plus élevée actuelles d'être maintenues dans l'état bloqué pendant le temps le plus court possible. Cependant, l'héritage de priorité ne corrige pas l'inversion de priorité mais minimise seulement son effet.

DIFFÉRENCE CLÉ

  • Mutex est un mécanisme de verrouillage tandis que le sémaphore est un mécanisme de signalisation
  • Mutex est juste un objet tandis que Semaphore est un entier
  • Mutex n'a pas de sous-type tandis que Semaphore a deux types, qui comptent le sémaphore et le sémaphore binaire.
  • Le sémaphore prend en charge la modification des opérations d'attente et de signal, tandis que Mutex n'est modifié que par le processus qui peut demander ou libérer une ressource.
  • La valeur du sémaphore est modifiée à l'aide des opérations wait () et signal (), par contre, les opérations Mutex sont verrouillées ou déverrouillées.

Utilisation du sémaphore

Dans le cas d'un seul tampon, nous pouvons séparer le tampon de 4 Ko en quatre tampons de 1 Ko. Le sémaphore peut être associé à ces quatre tampons. Cela permet aux utilisateurs et aux producteurs de travailler sur différents tampons en même temps.

Utilisation de Mutex

Un mutex fournit une exclusion mutuelle, qui peut être soit un producteur, soit un consommateur qui peut avoir la clé (mutex) et poursuivre son travail. Tant que le producteur remplit le tampon, l'utilisateur doit attendre, et vice versa. Dans le verrouillage Mutex, tout le temps, un seul thread peut fonctionner avec la totalité du tampon.

Différence entre sémaphore et mutex

Paramètres Sémaphore Mutex
Mécanisme C'est un type de mécanisme de signalisation. C'est un mécanisme de verrouillage.
Type de données Le sémaphore est une variable entière. Mutex n'est qu'un objet.
Modification Les opérations d'attente et de signal peuvent modifier un sémaphore. Il n'est modifié que par le processus qui peut demander ou libérer une ressource.
La gestion des ressources Si aucune ressource n'est libre, le processus nécessite une ressource qui doit exécuter l'opération d'attente. Il doit attendre que le nombre du sémaphore soit supérieur à 0. S'il est verrouillé, le processus doit attendre. Le processus doit être conservé dans une file d'attente. Cela ne doit être accessible que lorsque le mutex est déverrouillé.
Fil de discussion Vous pouvez avoir plusieurs threads de programme. Vous pouvez avoir plusieurs threads de programme dans mutex mais pas simultanément.
La possession La valeur peut être modifiée par tout processus libérant ou obtenant la ressource. Le verrouillage d'objet n'est libéré que par le processus, qui a obtenu le verrou sur celui-ci.
Les types Les types de sémaphore comptent le sémaphore et le sémaphore binaire. Mutex n'a pas de sous-types.
Opération La valeur du sémaphore est modifiée à l'aide des opérations wait () et signal (). L'objet Mutex est verrouillé ou déverrouillé.
Occupation des ressources Il est occupé si toutes les ressources sont utilisées et que le processus demandant la ressource effectue l'opération wait () et se bloque jusqu'à ce que le nombre de sémaphores devienne> 1. Dans le cas où l'objet est déjà verrouillé, le processus demandant des ressources attend et est mis en file d'attente par le système avant que le verrou ne soit libéré.

Faits communs sur Mutex et sémaphore

Voici quelques faits communs sur Mutex et Semaphore:

  • Une seule tâche peut acquérir le mutex. Donc, il y a une propriété associée à un mutex, et seul le propriétaire peut libérer le mutex.
  • Les raisons d'utiliser mutex et sémaphore sont différentes peut-être en raison de la similitude dans leur implémentation, un mutex serait appelé sémaphore binaire.
  • Une idée fausse très connue est que les mutex et les sémaphores sont presque identiques, la seule différence étant qu'un Mutex est capable de compter jusqu'à 1, tandis que les sémaphores sont capables de compter de 0 à N.
  • Il y a toujours une incertitude entre le sémaphore binaire et le mutex. Vous pouvez entendre qu'un mutex est un sémaphore binaire, ce qui n'est pas correct.

Avantages du sémaphore

Voici les avantages / avantages de l'utilisation de Semaphore:

  • Il permet à plus d'un thread d'accéder à la section critique
  • Les sémaphores sont indépendants de la machine.
  • Les sémaphores sont implémentés dans le code indépendant de la machine du micro-noyau.
  • Ils ne permettent pas à plusieurs processus d'entrer dans la section critique.
  • Comme il y a une attente occupée dans le sémaphore, il n'y a jamais de perte de temps et de ressources de processus.
  • Ils sont indépendants de la machine et doivent être exécutés dans le code indépendant de la machine du micro-noyau.
  • Ils permettent une gestion flexible des ressources.

Avantages de Mutex

Voici les avantages / avantages importants de Mutex

  • Les mutex ne sont que de simples verrous obtenus avant d'entrer dans sa section critique puis de la libérer.
  • Étant donné qu'un seul thread est dans sa section critique à un moment donné, il n'y a pas de conditions de concurrence et les données restent toujours cohérentes.

Inconvénient des sémaphores

Voici les inconvénients / inconvénients du sémaphore

  • L'une des plus grandes limitations d'un sémaphore est l'inversion de priorité.
  • Le système d'exploitation doit garder une trace de tous les appels à attendre et signaler le sémaphore.
  • Leur utilisation n'est jamais imposée, mais c'est uniquement par convention.
  • Afin d'éviter les blocages dans le sémaphore, les opérations Attendre et Signal doivent être exécutées dans le bon ordre.
  • La programmation sémaphore est une méthode complexe, il y a donc des chances de ne pas parvenir à l'exclusion mutuelle.
  • Ce n'est pas non plus une méthode pratique pour une utilisation à grande échelle car leur utilisation entraîne une perte de modularité.
  • Le sémaphore est plus sujet aux erreurs du programmeur.
  • Cela peut entraîner un blocage ou une violation de l'exclusion mutuelle en raison d'une erreur du programmeur.

Inconvénients de Mutex

Voici les inconvénients / inconvénients du Mutex

  • Si un thread obtient un verrou et se met en veille ou s'il est préempté, alors l'autre thread peut ne pas pouvoir avancer. Cela peut conduire à la famine.
  • Il ne peut pas être verrouillé ou déverrouillé à partir d'un contexte différent de celui qui l'a acquis.
  • Un seul thread doit être autorisé dans la section critique à la fois.
  • L'implémentation normale peut conduire à un état d'attente occupé, ce qui gaspille du temps CPU.