Différence entre le mutex et le sémaphore

Mutex vs Semaphore

Un mutex est analogue à une clé unique dans une pièce. Une personne qui détient la clé, qui est analogue à un fil, est la seule à pouvoir accéder à la pièce. La personne avec l'accès devra alors donner la clé à la prochaine personne en ligne. Par conséquent, un mutex ne peut être libéré que par le thread qui l'acquiert..

Un mutex est normalement utilisé pour sérialiser l'accès à une section d'un code réentrant '', une sorte de code qui ne peut pas être exécuté par plusieurs threads à la fois. Un seul thread est autorisé dans une section. Cela oblige les autres threads de la file d'attente à attendre. Avant qu'un thread n'accède, il devra attendre jusqu'à ce que le thread abandonne la section..

En utilisant la même analogie dans mutex, les sémaphores représentent le nombre de clés similaires pouvant accéder au même nombre de pièces avec des verrous similaires. Un sémaphore ou la valeur d'un nombre de sémaphores dépend du nombre de personnes (threads) entrant ou sortant de la salle. S'il y a 5 chambres et qu'elles sont toutes occupées, le nombre de sémaphores est égal à zéro. Si deux quittent la pièce, le compte est deux et les deux clés sont données aux deux suivantes dans la file d'attente..

Cela dit, les sémaphores peuvent être signalés simultanément par n'importe quel thread ou processus et conviennent parfaitement aux applications nécessitant une synchronisation. Néanmoins, les sémaphores sont utilisés pour limiter efficacement le nombre d'utilisateurs simultanés d'une ressource commune en fonction du nombre maximal de sémaphores..

Donc, fondamentalement, un mutex peut être considéré comme un sémaphore ayant une valeur de un.

La décrémentation et l’incrément du sémaphore dépendent du fait que les threads demandent l’accès à la ressource commune ou quittent la section..

En théorie, les sémaphores mutex et (binaires) sont sémantiquement similaires. L'implémentation du mutex peut être effectuée à l'aide de sémaphores et il en va de même pour l'inverse. Cependant, dans le sens pratique, ils peuvent être un peu différents.

Les mutex sont destinés à être appliqués uniquement pour l'exclusion mutuelle et les sémaphores binaires sont destinés à être utilisés pour l'exclusion mutuelle et la notification d'événements. Bien qu'ils soient très similaires en termes de mise en œuvre et de sémantique générale, ils sont utilisés différemment.

Résumé:

1. Mutex est généralement utilisé pour sérialiser l’accès à une ressource commune alors qu’un sémaphore est constitué de plusieurs accès simultanés..

2. Mutex est comme un sémaphore avec un compte de un.
3. Mutex n'autorise l'accès qu'à un seul thread alors que les sémaphores peuvent être signalés simultanément par n'importe quel thread ou processus.

4. Les sémaphores sont idéaux pour la synchronisation et sont souvent utilisés pour la notification d'événements et l'exclusion mutuelle, tandis que mutex n'est appliqué que pour l'exclusion mutuelle..