web-dev-qa-db-fra.com

Monitor vs Mutex

J'ai lu que mutex est un sémaphore de valeur 1 (sémaphore binaire) qui est utilisé pour imposer l'exclusion mutuelle.

J'ai lu ce lien Sémaphore vs moniteurs - quelle est la différence? qui dit que le moniteur aide à réaliser l'exclusion mutuelle.

Quelqu'un peut-il me dire la différence entre mutex et moniteur, car les deux font en fait la même chose

27
Zephyr

Puisque vous n'avez pas spécifié le système d'exploitation ou la langue/bibliothèque dont vous parlez, permettez-moi de répondre de manière générique.

Conceptuellement, ce sont les mêmes. Mais généralement, ils sont mis en œuvre légèrement différemment

Moniteur

Habituellement, la mise en œuvre des moniteurs est plus rapide/légère, car elle est conçue pour une synchronisation multithread dans le même processus. En outre, généralement, il est fourni par un framework/bibliothèque lui-même (par opposition à la demande du système d'exploitation).

Mutex

Habituellement, les mutex sont fournis par le noyau du système d'exploitation et les bibliothèques/frameworks fournissent simplement une interface pour l'invoquer. Cela les rend lourds/plus lents, mais ils fonctionnent sur plusieurs threads sur différents processus. Le système d'exploitation peut également fournir des fonctionnalités permettant d'accéder au mutex par son nom pour un partage facile entre les instances d'exécutables distincts (par opposition à l'utilisation d'un descripteur pouvant être utilisé par fork uniquement).

19
Vikhram

Les moniteurs sont différents de Mutex, mais ils peuvent être considérés comme similaires dans le sens où les moniteurs sont construits sur Mutex. Voir la représentation du moniteur dans une image en bas, pour plus de clarté.

Monitor est une construction de synchronisation qui permet aux threads d'avoir à la fois une exclusion mutuelle (à l'aide de verrous) et une coopération , c'est-à-dire la possibilité de faire en sorte que les threads attendent que certaines conditions soient remplies. (en utilisant set d'attente).

En d'autres termes, avec les données qui implémentent un verrou, chaque Java est logiquement associé aux données qui implémentent un ensemble d'attente. Alors que les verrous aident les threads à travailler indépendamment sur les données partagées sans interférer avec un seul) un autre, les files d'attente aident les threads à coopérer les uns avec les autres pour travailler ensemble vers un objectif commun, par exemple, tous les threads en attente seront déplacés vers cet ensemble d'attente et tous seront avertis une fois le verrou libéré. aide supplémentaire de verrouillage ( mutex ).

enter image description here

Si vous le souhaitez, vous pouvez voir ma réponse ici , qui peut ou non être pertinente pour cette question.

Vous pouvez trouver une autre discussion pertinente ici

Sémaphore vs moniteurs - quelle est la différence?

8
user4774371