Quelle est la différence entre le binaire sémaphore mutex et ou ils sont essentiellement de même?
Réponses
Trop de publicités?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.
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.
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
Bons articles sur le sujet:
- MUTEX VS. LES SÉMAPHORES – PARTIE 1: LES SÉMAPHORES
- MUTEX VS. LES SÉMAPHORES – PARTIE 2: LE MUTEX
- MUTEX VS. LES SÉMAPHORES – PARTIE 3 (DERNIÈRE PARTIE): PROBLÈMES DE L'EXCLUSION MUTUELLE
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.
É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.