Sémaphore vs Mutex
Sémaphore est une structure de données utilisée pour garantir que plusieurs processus n'accèdent pas simultanément à une ressource commune ou à une section critique, dans des environnements de programmation parallèles. Les sémaphores sont utilisés pour éviter les blocages morts et les conditions de concurrence. Mutex (objet d'exclusion mutuelle) est également utilisé pour éviter l'accès à une ressource commune en même temps par plusieurs processus simultanés.
Qu'est-ce qu'un sémaphore??
Sémaphore 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ée P) et signal (historiquement appelée V). L'opération wait bloque un processus jusqu'à ce que le sémaphore soit ouvert et que l'opération du signal autorise un autre processus (thread) à 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 wait est appelée par un thread, celui-ci est bloqué et 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 aucun thread 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 compteurs. 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 dispose de 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 souhaite utiliser la même ressource, il devra faire une demande. 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 verrou est supprimé et le thread en attente dans la file d'attente peut accéder à la ressource. Si plusieurs files d'attente attendent dans la file d'attente, l'accès leur est accordé à tour de rôle. 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, 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 obtenir une exclusion mutuelle dans les environnements de programmation parallèles, ils présentent quelques différences. Un objet mutex permet uniquement à un seul thread de consommer une ressource ou une section critique, tandis que les sémaphores autorisent un nombre restreint d'accès simultanés à une ressource (sous un nombre maximal autorisé). Avec les objets mutex, les autres threads souhaitant accéder à la ressource doivent attendre dans une file d'attente jusqu'à ce que le thread actuel ait fini d'utiliser la ressource..