Semaphore vs mutex
Le sémaphore est une structure de données qui est 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 serrures mortes 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 simultanés.
Qu'est-ce qu'un sémaphore?
Le sémaphore est une structure de données utilisée pour fournir une exclusion mutuelle aux sections critiques. Les sémaphores soutiennent principalement deux opérations appelées Wait (historiquement connues 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 permet à un autre processus (thread) d'entrer. Chaque sémaphore est associé à une file d'attente de processus d'attente. Lorsque l'opération d'attente est appelée par un fil, si le sémaphore est ouvert, le fil peut continuer. Si le sémaphore est fermé lorsque l'opération d'attente est appelée par un fil, le fil est bloqué et il doit attendre dans la file d'attente. L'opération de signal ouvre un sémaphore et s'il y a un thread qui attend déjà 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 rappelé pour les threads suivants. Il existe deux types de sémaphores appelés sémaphores Mutex et comptage des sémaphores. Les sémaphores Mutex permettent un seul accès à 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 démarrée, elle créera un mutex et la joignera à une ressource. Lorsque la ressource est utilisée par un thread, il est verrouillé et d'autres threads ne peuvent pas l'utiliser. Si un autre thread veut utiliser la même ressource, il devra faire une demande. Ensuite, ce fil 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 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 ont accès à une base rotative. Pratiquement, 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 le sémaphore et le mutex?
Même si les objets sémaphores et mutex sont utilisés pour atteindre l'exclusion mutuelle dans les environnements de programmation parallèle, ils ont quelques différences. Un objet Mutex permet uniquement à un seul thread de consommer une ressource ou une section critique, tandis que les sémaphores permettent un nombre restreint d'accès simultanément à une ressource (sous un nombre maximal autorisé). Avec les objets Mutex, les autres threads qui souhaitent accéder à la ressource doivent attendre dans une file d'attente, jusqu'à ce que le thread actuel soit terminé en utilisant la ressource.