Sémaphore vs moniteur
Sémaphore est une structure de données utilisée pour garantir que plusieurs processus n'accèdent pas simultanément à une ressource commune ou à une section critique, dans des environnements de programmation parallèles. Les sémaphores sont utilisés pour éviter les blocages morts et les conditions de concurrence. Monitor est une construction de langage de programmation qui permet également d'éviter que plusieurs processus accèdent simultanément à une ressource commune, garantissant ainsi une exclusion mutuelle. Les moniteurs utilisent des variables conditionnelles pour accomplir cette tâche.
Qu'est-ce qu'un sémaphore??
Sémaphore est une structure de données utilisée pour fournir une exclusion mutuelle aux sections critiques. Les sémaphores prennent principalement en charge deux opérations appelées attente (historiquement appelée P) et signal (historiquement appelée V). L'opération wait bloque un processus jusqu'à ce que le sémaphore soit ouvert et que l'opération du signal autorise un autre processus (thread) à 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 wait est appelée par un thread, celui-ci est bloqué et 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 aucun thread 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 compteurs. Les sémaphores Mutex permettent un accès unique à une ressource et les sémaphores de comptage permettent à plusieurs threads d'accéder à une ressource (qui dispose de 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 appels de procédures simultanés. Un moniteur s'assure que ses données ne sont pas confrontées à des accès non structurés et garantit que les bandes de roulement (qui accèdent aux données du moniteur par le biais de ses procédures) interagissent de manière légitime. Un moniteur garantit l’exclusion mutuelle en permettant à un seul thread d’exécuter une procédure de moniteur à un moment donné. Si un autre thread tente d'appeler une méthode dans le moniteur, alors qu'il exécute déjà une procédure dans le moniteur, la seconde 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 de planification.
Quelle est la différence entre Semaphore et Monitor?
Même si les sémaphores et les moniteurs sont utilisés pour obtenir une exclusion mutuelle dans des environnements de programmation parallèles, les techniques utilisées pour réaliser cette tâche diffèrent. Dans les moniteurs, le code utilisé pour obtenir une exclusion mutuelle se trouve à un endroit unique et est plus structuré, tandis que le code pour les sémaphores est distribué sous forme d’appels de fonction wait et signal. En outre, il est très facile de faire des erreurs lors de l’implémentation de sémaphores, alors qu’il ya très peu de chance de faire des erreurs lors de l’implémentation de moniteurs. De plus, les moniteurs utilisent des variables de condition, alors que les sémaphores ne.