Recommandé, 2024

Choix De L'Éditeur

Différence entre le sémaphore et le mutex

La synchronisation des processus joue un rôle important dans le maintien de la cohérence des données partagées. Les solutions logicielles et matérielles sont présentes pour le traitement des problèmes de section critiques. Mais les solutions matérielles pour les problèmes de section critiques sont assez difficiles à mettre en œuvre. Dans l'article d'aujourd'hui, nous allons discuter de deux solutions logicielles pour traiter les problèmes de section critiques, à savoir Semaphore et Mutex.

La différence fondamentale entre sémaphore et mutex est que sémaphore est un mécanisme de signalisation, c’est-à-dire que les processus effectuent les opérations wait () et signal () pour indiquer s’ils acquièrent ou libèrent la ressource, tandis que Mutex est un mécanisme de verrouillage, le processus doit acquérir le verrouillage. objet mutex s'il veut acquérir la ressource. Il existe quelques différences supplémentaires entre sémaphore et mutex, discutons-les à l'aide du tableau de comparaison ci-dessous.

Tableau de comparaison

Base de comparaisonSémaphoreMutex
De baseLe sémaphore est un mécanisme de signalisation.Mutex est un mécanisme de verrouillage.
ExistenceLe sémaphore est une variable entière.Mutex est un objet.
Une fonctionSemaphore permet à plusieurs threads de programme d'accéder à une instance finie de ressources.Mutex permet à plusieurs threads de programme d'accéder à une seule ressource mais pas simultanément.
La possessionLa valeur de sémaphore peut être modifiée par tout processus d’acquisition ou de libération de la ressource.Le verrou d’objet Mutex n’est libéré que par le processus qui a acquis le verrou dessus.
Classer par catégoriesLe sémaphore peut être catégorisé en comptage de sémaphore et binaire.Mutex n'est pas catégorisé davantage.
OpérationLa valeur du sémaphore est modifiée à l’aide des opérations wait () et signal ().L'objet Mutex est verrouillé ou déverrouillé par le processus qui demande ou libère la ressource.
Ressources occupéesSi toutes les ressources sont utilisées, le processus demandant une ressource exécute l'opération wait () et se bloque jusqu'à ce que le nombre de sémaphores soit supérieur à un.Si un objet mutex est déjà verrouillé, le processus de demande de ressources attend et est mis en file d'attente par le système jusqu'à ce que le verrou soit libéré.

Définition de sémaphore

Semaphore est un outil de synchronisation de processus. Sémaphore est généralement une variable entière S qui est initialisée au nombre de ressources présentes dans le système et la valeur de sémaphore ne peut être modifiée que par deux fonctions wait () et signal () en dehors de l'initialisation.

Les opérations wait () et signal () modifient la valeur du sémaphore de manière indivisible . Cela signifie que lorsqu'un processus modifie la valeur du sémaphore, aucun autre processus ne peut modifier simultanément la valeur du sémaphore. Les sémaphores se distinguent par le système d’exploitation en deux catégories. Sémaphores de comptage et Sémaphore binaire .

Dans Counting Semaphore, la valeur du sémaphore S est initialisée au nombre de ressources présentes dans le système. Lorsqu'un processus souhaite accéder à la ressource, il effectue l'opération wait () sur le sémaphore et décrémente la valeur du sémaphore de un. Lorsqu'il libère la ressource, il effectue l'opération signal () sur le sémaphore et incrémente la valeur de sémaphore de un. Lorsque le nombre de sémaphores passe à 0, cela signifie que toutes les ressources sont occupées par les processus. Si un processus doit utiliser une ressource lorsque le nombre de sémaphores est 0, il exécute wait () et est bloqué jusqu'à ce que la valeur de sémaphore devienne supérieure à 0.

Dans le sémaphore binaire, la valeur du sémaphore est comprise entre 0 et 1 . Il est similaire au verrouillage mutex, mais mutex est un mécanisme de verrouillage alors que le sémaphore est un mécanisme de signalisation. Dans un sémaphore binaire, si un processus souhaite accéder à la ressource, il effectue l'opération wait () sur le sémaphore et décrémente la valeur de sémaphore de 1 à 0. Lorsqu'il libère la ressource, il effectue une opération signal () sur le sémaphore et l'incrémente. sa valeur est 1. Si la valeur de sémaphore est 0 et qu'un processus souhaite accéder à la ressource, il effectue l'opération wait () et se bloque jusqu'à ce que le processus en cours d'utilisation des ressources libère la ressource.

Définition de mutex

Mutual Exclusion Object est bientôt appelé Mutex. À partir du terme exclusion mutuelle, nous pouvons comprendre qu'un seul processus à la fois peut accéder à la ressource donnée. L'objet mutex permet aux multiples threads de programme d'utiliser la même ressource mais pas une à la fois.

Lorsqu'un programme démarre, il demande au système de créer un objet mutex pour une ressource donnée. Le système crée l'objet mutex avec un nom ou un ID unique. Chaque fois que le thread de programme veut utiliser la ressource qu'il occupe verrouille l'objet mutex, utilise la ressource et, après utilisation, libère le verrou sur l'objet mutex. Ensuite, le processus suivant est autorisé à acquérir le verrou sur un objet mutex.

Pendant ce temps, un processus a acquis le verrou sur l'objet mutex, aucun autre processus / processus ne peut accéder à cette ressource. Si l'objet mutex est déjà verrouillé, le processus souhaitant acquérir le verrou sur l'objet mutex doit attendre et est mis en file d'attente par le système jusqu'à ce que l'objet mutex soit déverrouillé.

Différences clés entre le sémaphore et le mutex

  1. Le sémaphore est un mécanisme de signalisation, car les opérations wait () et signal () effectuées sur une variable sémaphore indiquent si un processus acquiert la ressource ou libère la ressource. D'autre part, le mutex est un mécanisme de verrouillage, car pour acquérir une ressource, un processus doit verrouiller l'objet mutex et tout en libérant un processus de ressource, il doit déverrouiller l'objet mutex.
  2. Le sémaphore est typiquement une variable entière alors que mutex est un objet .
  3. Semaphore permet à plusieurs threads de programme d'accéder à l' instance finie de ressources . De son côté, Mutex permet à plusieurs threads de programme d'accéder à une seule ressource partagée, mais une à la fois.
  4. La valeur de la variable sémaphore peut être modifiée par tout processus qui acquiert ou libère une ressource en effectuant les opérations wait () et signal (). D'autre part, le verrou acquis sur l'objet mutex ne peut être libéré que par le processus qui a acquis le verrou sur l'objet mutex.
  5. Les sémaphores sont de deux types comptant le sémaphore et le sémaphore binaire qui est assez similaire au mutex.
  6. La valeur de la variable sémaphore est modifiée par les opérations wait () et signal () en dehors de l'initialisation. Cependant, l'objet muet est verrouillé ou déverrouillé par le processus d'acquisition ou de libération de la ressource.
  7. Si toutes les ressources sont acquises par le processus et qu'aucune ressource n'est libre, le processus désirant acquérir une ressource effectue l'opération wait () sur la variable sémaphore et se bloque jusqu'à ce que le nombre de sémaphores devienne supérieur à 0. Mais si un objet mutex est déjà verrouillé, le processus désirant acquérir les ressources attend en attente et est mis en file d' attente par le système jusqu'à ce que la ressource soit libérée et que l'objet mutex soit déverrouillé.

Conclusion:

Sémaphore est une meilleure option dans le cas où plusieurs instances de ressources sont disponibles. Dans le cas d'une seule ressource partagée, mutex est un meilleur choix.

Top