978 votes

La différence entre le binaire sémaphore mutex et de

Quelle est la différence entre le binaire sémaphore mutex et ou ils sont essentiellement de même?

805voto

Benoit Points 12985

Ils sont PAS la même chose. Ils sont utilisés pour des fins différentes!
Bien que les deux types de sémaphores ont plein/vide, de l'état et de l'utilisation de la même API, leur utilisation est très différente.

Les Sémaphores D'Exclusion Mutuelle
Les sémaphores d'Exclusion mutuelle sont utilisés pour protéger les ressources partagées (structure de données, de fichiers, etc..).

Un Mutex, sémaphore est "possédé" par l'équipe qui le prend. Si la Tâche B tente de semGive un mutex actuellement occupé par Une tâche, Tâche B de l'appel renvoie une erreur et l'échec.

Mutex toujours utiliser la séquence suivante:

 - SemTake
 - Section Critique
 - SemGive

Voici un exemple simple:

 Thread Un Thread B
 Prendre Mutex
 les données d'accès
 ... Prendre Mutex <== bloc
...
 Donner Mutex accéder à des données <== Débloque
...
 Donner Mutex

Sémaphore Binaire
Sémaphore binaire adresse une tout autre question:

  • La tâche B est suspendu en attente que quelque chose arrive (un capteur déclenché par exemple).
  • Capteur de Voyages et une Routine de Service d'Interruption s'exécute. Il doit notifier une tâche du voyage.
  • La tâche B doit s'exécuter et prendre les mesures appropriées pour le capteur de voyage. Puis revenir à l'attente.

   Task A                      Task B
   ...                         Take BinSemaphore   <== wait for something
   Do Something Noteworthy
   Give BinSemaphore           do something    <== unblocks

Notez qu'avec un sémaphore binaire, c'est OK pour B de prendre le sémaphore et Un à lui donner.
Encore une fois, un sémaphore binaire n'est PAS de protéger une ressource à partir d'access. L'acte de Donner et de Prendre un sémaphore sont fondamentalement découplés.
Généralement, il fait peu de sens pour la même tâche de façon un donner et prendre sur le même sémaphore binaire.

531voto

Mladen Janković Points 3966

Mutex ne peut être libéré que par le thread qui l'avaient acquise, alors que vous pouvez le signal sémaphore à partir de n'importe quel autre thread (ou processus), de sorte que les sémaphores sont plus adaptés à certains des problèmes de synchronisation comme producteur-consommateur.

Sur Windows, les sémaphores binaires sont plus comme des objets événement que les mutex.

488voto

dlinsin Points 5863

Les Toilettes exemple est une bonne analogie:

Mutex:

Est une des clés d'un wc. Une personne peut la clé - occuper le wc - au le temps. Lorsque vous avez terminé, la personne donne (libère) la clé de la prochaine personne dans la file d'attente.

Officiellement: "les Mutex sont généralement utilisé pour serialise l'accès à une section de ré-entrant le code qui ne peut pas être exécutées simultanément par plus d'un fil de discussion. Un objet mutex permet uniquement d'un fil dans une section contrôlée, forcer les autres threads qui tentent de accéder à cette section pour attendre jusqu'à ce que le premier thread a quitté cette section." Ref: Symbian Développeur Bibliothèque

(Un mutex est vraiment un sémaphore avec la valeur 1.)

Sémaphore:

Est le nombre de free identiques toilettes les touches. Exemple, disons que nous avons quatre les toilettes à l'identique des serrures et des clés. Le sémaphore count - nombre de touches - est fixé à 4 au début (tous les quatre toilettes sont libres), puis le comte la valeur est décrémentée que les gens sont venir dans. Si toutes les salles sont pleines, c'est à dire. il n'y a pas de libre-clés gauche, la sémaphore nombre est 0. Maintenant, lors de l'eq. une personne quitte les toilettes, sémaphore est augmenté de 1 (un gratuitement la clé), et donné à la prochaine personne dans la file d'attente.

Officiellement: "Un sémaphore limite l' nombre d'utilisateurs simultanés d'un ressource partagée jusqu'à un maximum numéro. Les Threads peuvent demander l'accès à la ressource (décrémentation de la sémaphore), et peut être le signal qu'ils avez fini d'utiliser la ressource (l'incrémentation du sémaphore)." Ref: Symbian Développeur De La Bibliothèque

177voto

teki Points 781

Bons articles sur le sujet:

De la partie 2:

Le mutex est similaire aux principes du sémaphore binaire avec un différence significative: le principe de la propriété. La propriété de la simple concept que lorsqu'une tâche serrures (acquiert) un mutex seulement il peut déverrouiller (libération). Si une tâche essaie de déverrouiller un mutex il n'a pas verrouillé (donc ne les possède pas), alors une condition d'erreur est rencontrés et, plus important encore, le mutex n'est pas déverrouillé. Si l' l'exclusion mutuelle de l'objet n'a pas propriété, puis, indépendamment de ce qu'il est appelé, il n'est pas un mutex.

116voto

Hemant Points 627

Étant donné qu'aucune réponse ci-dessus efface la confusion, en voici un qui a effacé ma confusion.

Strictement parlant, un mutex est un mécanisme de verrouillage utilisé pour synchroniser l'accès à une ressource. Une seule tâche (peut être un fil ou processus basé sur l'OS de l'abstraction) peut acquérir le mutex. Cela signifie qu'il y seront la propriété associée avec des mutex, et seul le propriétaire peut libérer le verrou (mutex).

Sémaphore est mécanisme de signalisation ("je suis en fait, vous pouvez effectuer sur le" type de signal). Par exemple, si vous êtes à l'écoute des chansons (à supposer comme une tâche) sur votre mobile et, en même temps que votre ami vous appelle, une interruption est déclenchée lors de laquelle une routine de service d'interruption (ISR) sera le signal de l'appel de la tâche de traitement de réveil.

Source: http://www.geeksforgeeks.org/mutex-vs-semaphore/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X