Sémaphore vs Moniteurs - quelle est la différence?
Quelles sont les différences majeures entre un Moniteur et un Sémaphore?
- Vous pouvez penser à surveiller comme un sémaphore binaire.
- similaire: stackoverflow.com/q/3547030/158779
- S'il vous plaît aller à travers ce albahari.com/threading/part2.aspx. J'ai lu cet article, le meilleur que j'ai jamais lu sur le Filetage
- Je ne pense pas que vous êtes de droite, Maxime. Un sémaphore est "inférieur" au niveau de la structure, si je ne me trompe pas, alors qu'un Moniteur est un de plein fouet l'objet. Je me souviens que nous sommes allés sur les moniteurs brièvement dans mes Systèmes d'Exploitation de la classe dans le collège, mais je ne me souviens pas comment un Moniteur diffère d'un Mutex, en dehors du fait qu'elle est orientée objet. Je me souviens d'un problème qui pourrait être fait à l'aide de moniteurs, mais nous ne pouvions pas utiliser cette même méthode dans la classe, en raison des restrictions du langage C.
- Sémaphore et le Moniteur sont très différence, mais équivalent en puissance, dans le sens que vous pouvez mettre en œuvre l'une de l'autre. Vous pouvez lire Hoare d'origine de papier qui prouve leur équivalence à partir de ici
- Un sémaphore est un cas particulier d'un moniteur-l'un dont les opérateurs sont de V & P (signal & attendez, etc). Quelles sont les choses dans un langage particulier/bibliothèque de passer par ces noms dépend de la langue/de la bibliothèque.
- Tu veux dire qu'un mutex est un sémaphore binaire.
Vous devez vous connecter pour publier un commentaire.
Un Moniteur est un objet conçu pour être accessible à partir de plusieurs threads. Les fonctions de membre ou les méthodes d'un objet moniteur va appliquer l'exclusion mutuelle, de sorte qu'un seul thread peut exécuter aucune action sur l'objet à un moment donné. Si un thread est en cours d'exécution d'une fonction membre de l'objet, puis un autre thread qui tente d'appeler une fonction membre d'un objet devrez attendre jusqu'à ce que le premier a fini.
Un Sémaphore est une baisse du niveau de l'objet. Vous pouvez très bien utiliser un sémaphore pour mettre en œuvre un moniteur. Un sémaphore est essentiellement juste un compteur. Lorsque le compteur est positif, si un thread tente d'acquérir le sémaphore puis il est permis, et le compteur est décrémenté. Lorsqu'un thread est fait, alors il libère le sémaphore, et incrémente le compteur.
Si le compteur est déjà à zéro lorsqu'un thread tente d'acquérir le sémaphore alors, il doit attendre jusqu'à ce qu'un autre thread libère le sémaphore. Si plusieurs threads sont en attente lorsqu'un thread libère un sémaphore puis l'un d'eux qu'il obtient. Le thread qui a sorti un sémaphore n'a pas besoin d'être le même thread que celui qui l'a acquis.
Un moniteur, c'est comme les toilettes publiques. Une seule personne peut saisir à la fois. Ils verrouillage de la porte pour empêcher quiconque de venir dans, faire leur truc, et puis déverrouiller quand ils partent.
Un sémaphore est comme un vélo de location de place. Ils ont un certain nombre de vélos. Si vous essayez de louer un vélo et ils ont un libre, alors vous pouvez en prendre, sinon, vous devez attendre. Lorsque quelqu'un retourne leur vélo, puis quelqu'un d'autre peut le faire. Si vous avez un vélo, puis vous pouvez le donner à quelqu'un d'autre pour le retour --- la location de vélo de la place ne se soucie pas de qui il revient, tant qu'ils obtiennent leur vélo à l'arrière.
Explication suivante explique d'ailleurs comment wait() et signal() de surveiller diffèrent de P et de V de sémaphore.
La wait() et signal() opérations sur les variables de condition dans un moniteur sont similaires à P et V opérations sur le comptage de sémaphores.
Une attente déclaration peut bloquer un processus de l'exécution, tandis qu'un signal déclaration peut causer un autre processus pour être débloqué. Cependant, il y a quelques différences entre eux. Lorsqu'un processus exécute une P de fonctionnement, il n'est pas nécessairement bloquer ce processus parce que le comptage sémaphore peut être supérieure à zéro. En revanche, lors de l'attente de l'instruction, il est toujours bloque le processus. Lorsqu'une tâche exécute une V opération sur un sémaphore, il débloque une tâche en attente sur le sémaphore ou incrémente le compteur du sémaphore de si aucune tâche n'est pour le déverrouiller. D'autre part, si un processus s'exécute un signal d'instruction quand il n'y a pas d'autre processus pour le débloquer, il n'y a pas d'effet sur la variable de condition. Une autre différence entre les sémaphores et les moniteurs, c'est que les utilisateurs réveiller par un V opération peut reprendre l'exécution sans retard. A l'inverse, les utilisateurs réveiller par un signal de redémarrage uniquement lorsque l'écran est déverrouillé. En outre, un moniteur solution est plus structuré que celui avec les sémaphores, car les données et les procédures sont encapsulés dans un module unique et que l'exclusion mutuelle est fourni automatiquement par la mise en œuvre.
Lien: ici pour plus de lecture. Espérons que cela aide.
Une Ligne De Réponse:
Moniteur: ne contrôle qu'un seul thread à la fois peut exécuter dans le moniteur. (besoin d'acquérir de verrouillage pour exécuter le thread unique)
Sémaphore: un verrou qui protège une ressource partagée. (besoin d'acquérir le verrou pour accéder à la ressource)
Sémaphore permet à plusieurs threads (jusqu'à un nombre défini) pour accéder à un objet partagé. Les moniteurs permettent mutuellement exclusifs l'accès à un objet partagé.
Moniteur
Sémaphore
java.util.ArrayList
: est-il un objet ou d'un conteneur de plusieurs objets? Eh bien, c'est les deux en même temps. Donc, est sémaphore pour contrôler le niveau d'accès? Je dirais: non.Quand un sémaphore est utilisé pour de la garde d'une région critique, il n'y a pas de relation directe entre le sémaphore et les données protégées. C'est en partie la raison pour laquelle les sémaphores peuvent être dispersées dans le code, et pourquoi il est facile d'oublier d'appeler attendre ou informer, auquel cas le résultat sera, respectivement, de violer l'exclusion mutuelle ou de verrouiller la ressource de façon permanente.
En revanche, niehter de ces mauvaises choses peuvent se produire avec un moniteur. Un moniteur est fatigué directement aux données (encapsule les données) et, parce que le moniteur opérations sont opérations atomiques, il est impossible d'écrire du code qui peut accéder aux données sans avoir à appeler le protocole d'entrée. La sortie de protocole est automatiquement appelée lors de la surveiller l'opération est terminée.
Un moniteur est doté d'un mécanisme intégré pour l'état de la synchronisation dans la forme de la variable de condition avant de continuer. Si la condition n'est pas satisfaite, le processus doit attendre jusqu'à ce qu'il est informé d'un changement dans la condition. Lorsqu'un processus est en attente de la condition de synchronisation, le suivi de l'application prend en charge le problème de l'exclusion mutuelle, et permet à un autre processus pour accéder à l'écran.
Pris de L'Université Ouverte M362 de l'Unité 3, "l'Interaction des processus de" matériel de cours.
Sémaphore :
À l'aide d'un compteur ou un drapeau pour contrôler l'accès à certaines ressources partagées dans un tel système, implique l'utilisation d' Sémaphore.
Exemple:
Drapeaux seulement de révéler l'état actuel de la Ressource, aucun compte ou toute autre information sur l'attente ou l'exécution d'objets sur la ressource.
Moniteur :
Un Moniteur synchronise l'accès à un Objet par la communication avec les threads intéressés par l'objet, l'invitant à acquérir accès ou attendre une condition pour devenir vrai.
Exemple: