Différence entre sémaphore et mutex

Différence entre sémaphore et mutex
Différence entre sémaphore et mutex

Vidéo: Différence entre sémaphore et mutex

Vidéo: Différence entre sémaphore et mutex
Vidéo: Refractor vs Reflector telescope explained for beginners 2024, Juillet
Anonim

Sémaphore contre Mutex

Semaphore est une structure de données utilisée pour s'assurer que plusieurs processus n'accèdent pas à une ressource commune ou à une section critique en même temps, dans des environnements de programmation parallèles. Les sémaphores sont utilisés pour éviter les blocages et les conditions de course. Mutex (Mutual Exclusion Object) 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 fournir une exclusion mutuelle aux sections critiques. Les sémaphores prennent principalement en charge deux opérations appelées attente (historiquement appelées P) et signal (historiquement appelées V). L'opération d'attente bloque un processus jusqu'à ce que le sémaphore soit ouvert et l'opération de signal permet à un autre processus (thread) d'entrer. Chaque sémaphore est associé à une file d'attente de processus en attente. Lorsque l'opération d'attente 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 doit attendre dans la file d'attente. L'opération de signal ouvre un sémaphore et s'il y a déjà un thread 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 threads suivants. 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 les sémaphores de comptage permettent à plusieurs threads d'accéder à une ressource (qui a plusieurs unités disponibles).

Qu'est-ce qu'un mutex ?

Lorsqu'une application informatique est lancé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 ait terminé avec la ressource. Lorsque le premier thread a terminé avec la ressource, le verrou est supprimé et le thread qui attend dans la file d'attente peut accéder à la ressource. S'il y a plusieurs threads en attente dans la file d'attente, ils y ont accès par rotation. Pratiquement, lorsque le mutex alterne l'accès à une ressource entre plusieurs threads, il sera visible que plusieurs threads consomment une ressource en même temps. Mais en interne, un seul thread accède à la ressource à un moment donné.

Quelle est la différence entre Semaphore et Mutex ?

Même si les sémaphores et les objets mutex sont utilisés pour réaliser une exclusion mutuelle dans les environnements de programmation parallèles, ils présentent quelques différences. Un objet mutex ne permet qu'à un seul thread de consommer une ressource ou une section critique, alors que les sémaphores autorisent un nombre restreint d'accès simultanés à une ressource (en dessous d'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 ait fini d'utiliser la ressource.

Conseillé: