Différence entre Semaphore et Mutex

Anonim

Semaphore vs Mutex

Semaphore est une structure de données utilisée pour s'assurer que plusieurs processus n'accèdent pas à une ressource ou une section critique en même temps, dans des environnements de programmation parallèles. Les sémaphores sont utilisés pour éviter les écluses mortes et les conditions de course. Mutex (objet d'exclusion mutuelle) est également utilisé pour éviter l'accès à une ressource commune en même temps par plusieurs processus concurrents.

Qu'est-ce qu'un sémaphore ?

Semaphore est une structure de données utilisée pour assurer l'exclusion mutuelle des sections critiques. Les sémaphores supportent principalement deux opérations appelées wait (historiquement connu sous le nom de P) et signal (historiquement connu sous le nom de V). L'opération d'attente bloque un processus jusqu'à ce que le sémaphore soit ouvert et que l'opération de signal permette à un autre processus (thread) d'entrer. Chaque sémaphore est associé à une file d'attente de processus en attente. Lorsque l'opération wait est appelée par un thread, si le sémaphore est ouvert, le thread peut continuer. Si le sémaphore est fermé lorsque l'opération d'attente est appelée par un thread, le thread est bloqué et il doit attendre dans la file d'attente. L'opération de signal ouvre un sémaphore et si un thread est déjà en attente dans la file d'attente, ce processus est autorisé à continuer et s'il n'y a pas de threads en attente dans la file d'attente, le signal est mémorisé pour les prochains threads. Il existe deux types de sémaphores appelés sémaphores mutex et sémaphores de comptage. Les sémaphores Mutex permettent un accès unique à une ressource et le comptage des sémaphores permet à plusieurs threads d'accéder à une ressource (qui a plusieurs unités disponibles).

Qu'est-ce qu'un Mutex?

Lorsqu'une application informatique est démarrée, elle crée un mutex et l'attache à une ressource. Lorsque la ressource est utilisée par un thread, elle est verrouillée et les autres threads ne peuvent pas l'utiliser. Si un autre thread veut utiliser la même ressource, il devra faire une requête. Ensuite, ce thread sera placé dans une file d'attente jusqu'à ce que le premier thread soit terminé avec la ressource. Lorsque le premier thread est terminé avec la ressource, le verrouillage sera supprimé et le thread en attente dans la file d'attente peut accéder à la ressource. S'il y a plusieurs threads en attente dans la file d'attente, ils ont un accès par rotation. En pratique, lorsque le mutex alterne l'accès à une ressource entre plusieurs threads, il sera visible car plusieurs threads consomment une ressource en même temps. Mais en interne, seul un seul thread accède à la ressource à un moment donné.

Quelle est la différence entre Semaphore et Mutex?

Même si, à la fois les sémaphores et les objets mutex sont utilisés pour réaliser l'exclusion mutuelle dans des environnements de programmation parallèles, ils présentent certaines différences. Un objet mutex ne permet qu'un seul thread de consommer une ressource ou une section critique, alors que les sémaphores permettent un nombre restreint d'accès simultanés à une ressource (sous un nombre maximum autorisé).Avec les objets mutex, les autres threads qui veulent accéder à la ressource doivent attendre dans une file d'attente jusqu'à ce que le thread en cours soit terminé en utilisant la ressource.