Différence entre mutex et sémaphore

Différence entre mutex et sémaphore

Mutex vs sémaphore

Un mutex est analogue à une seule clé d'une pièce. Une personne tenant la clé, qui est analogue à un fil, est la seule à pouvoir avoir accès à la salle. La personne ayant l'accès devra alors abandonner la clé de la personne suivante en ligne. Par conséquent, un mutex ne peut être libéré que par le fil 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 en file d'attente pour attendre. Avant qu'un fil n'ait accès, il devra attendre le fil avant qu'il n'abandonne la section.

En utilisant la même analogie en mutex, les sémaphores sont le nombre de clés similaires qui peuvent accéder au même nombre de pièces avec des verrous similaires. Un sémaphore ou la valeur d'un dénombrement de sémaphore dépendra du nombre de personnes (threads) qui entrent ou sortent de la pièce. S'il y a 5 chambres et qu'ils sont tous occupés, alors le nombre de sémaphore est nul. Si deux quittent la pièce, alors le nombre est de deux et les deux clés sont données aux deux suivantes dans la file d'attente.

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

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

La diminution et l'incrément du sémaphore dépendent de la question de savoir si les threads demandent l'accès à la ressource commune ou quitte la section.

En théorie, les sémaphores Mutex et (binaires) sont sémantiquement similaires.La mise en œuvre du mutex peut être effectuée à l'aide de sémaphores et l'inverse est donc l'inverse. Cependant, au sens pratique, ils peuvent être un peu différents.

Les mutex sont destinés à être appliqués pour l'exclusion mutuelle uniquement et les sémaphores binaires sont destinés à être utilisés pour l'exclusion mutuelle et la notification des é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 tandis qu'un sémaphore est un certain nombre d'accès simultanés.

2. Mutex est comme un sémaphore avec un décompte.
3. Mutex permet uniquement à un seul thread d'avoir accès tandis 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 souvent utilisés pour la notification des événements et l'exclusion mutuelle tandis que Mutex n'est appliqué que pour l'exclusion mutuelle.