Différence entre le sémaphore et le moniteur

Anonim

Semaphore vs Monitor

Semaphore est une structure de données utilisée pour s'assurer que plusieurs processus n'accèdent pas à une ressource ou une section critique en même temps, dans des environnements de programmation parallèles. Les sémaphores sont utilisés pour éviter les écluses mortes et les conditions de course. Monitor est une construction de langage de programmation qui est également utilisée pour éviter que plusieurs processus accédant simultanément à une ressource commune garantissent une exclusion mutuelle. Les moniteurs utilisent des variables conditionnelles pour réaliser cette tâche.

Qu'est-ce qu'un sémaphore?

Semaphore est une structure de données utilisée pour assurer l'exclusion mutuelle des sections critiques. Les sémaphores supportent principalement deux opérations appelées wait (historiquement connu sous le nom de P) et signal (historiquement connu sous le nom de V). L'opération d'attente bloque un processus jusqu'à ce que le sémaphore soit ouvert et que l'opération de signal permette à un autre processus (thread) d'entrer. Chaque sémaphore est associé à une file d'attente de processus en attente. Lorsque l'opération wait est appelée par un thread, si le sémaphore est ouvert, le thread peut continuer. Si le sémaphore est fermé lorsque l'opération d'attente est appelée par un thread, le thread est bloqué et il doit attendre dans la file d'attente. L'opération de signal ouvre un sémaphore et si un thread est déjà en attente dans la file d'attente, ce processus est autorisé à continuer et s'il n'y a pas de threads en attente dans la file d'attente, le signal est mémorisé pour les prochains threads. Il existe deux types de sémaphores appelés sémaphores mutex et sémaphores de comptage. Les sémaphores Mutex permettent un accès unique à une ressource et le comptage des sémaphores permet à plusieurs threads d'accéder à une ressource (qui a plusieurs unités disponibles).

Qu'est-ce qu'un moniteur?

Un moniteur est une construction de langage de programmation utilisée pour contrôler l'accès aux données partagées. Les moniteurs encapsulent les structures de données partagées, les procédures (qui fonctionnent sur des structures de données partagées) et la synchronisation entre les invocations de procédures concurrentes. Un moniteur veille à ce que ses données ne soient pas confrontées à des accès non structurés et garantisse que les trajets (qui accèdent aux données du moniteur à travers ses procédures) interagissent de manière légitime. Un moniteur garantit l'exclusion mutuelle en n'autorisant qu'un seul thread à exécuter une procédure de surveillance à un moment donné. Si un autre thread tente d'invoquer une méthode dans le moniteur, alors qu'un thread exécute déjà une procédure dans le moniteur, la deuxième procédure est bloquée et doit attendre dans la file d'attente. Il existe deux types de moniteurs nommés moniteurs Hoare et moniteurs Mesa. Ils diffèrent principalement par leur sémantique d'ordonnancement.

Quelle est la différence entre Semaphore et Monitor?

Même si les sémaphores et les moniteurs sont utilisés pour réaliser l'exclusion mutuelle dans des environnements de programmation parallèles, ils diffèrent par les techniques utilisées pour accomplir cette tâche.Dans les moniteurs, le code utilisé pour réaliser l'exclusion mutuelle se trouve dans un seul endroit et est plus structuré, tandis que le code pour les sémaphores est distribué sous forme d'appels de fonction d'attente et de signal. En outre, il est très facile de faire des erreurs lors de la mise en œuvre des sémaphores, alors qu'il y a très peu de chances de faire des erreurs lors de la mise en œuvre des moniteurs. En outre, les moniteurs utilisent des variables de condition, contrairement aux sémaphores.