Différence entre Mutex et Sémaphore Différence entre

Anonim

Mutex vs Semaphore

Un mutex est analogue à une seule clé d'une pièce. Une personne qui tient la clé, qui est analogue à un fil, est la seule qui peut avoir accès à la pièce. La personne avec l'accès devra alors abandonner 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 '' un type de code qui ne peut pas être exécuté par plusieurs threads à la fois. Un seul thread est autorisé dans une section. Cela force les autres threads en file d'attente à attendre. Avant qu'un thread accède à l'accès, il devra attendre le thread avant d'abandonner la section.

En utilisant la même analogie dans le 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 nombre de sémaphores dépend du nombre de personnes (fils de discussion) qui entrent ou sortent de la pièce. S'il y a 5 salles et qu'elles sont toutes occupées, le nombre de sémaphores est nul. 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 é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 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.

Le décrément 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. La mise en œuvre du mutex peut être faite en utilisant des sémaphores et c'est l'inverse. Cependant, dans la pratique, ils peuvent être un peu différents.

Les mutex sont destinés à être utilisé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énement. 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. Le mutex est généralement utilisé pour sérialiser l'accès à une ressource commune alors qu'un sémaphore est un nombre d'accès simultanés.

2. Mutex est comme un sémaphore avec un compte d'un.

3. Mutex ne permet à 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 sont souvent utilisés pour la notification d'événements et l'exclusion mutuelle, tandis que le mutex est uniquement appliqué pour une exclusion mutuelle.