J'assiste actuellement au cours de programmation simultanée dans mon université et nous avons récemment commencé à parler du concept d'un moniteur. Bien que je comprenne la nécessité de l'exclusion mutuelle, je ne comprends pas pourquoi j'utiliserais un moniteur pour cela.
Si je comprends bien, un moniteur garantit que exactement un ou aucun processus est dans la section critique à tout moment. Nous pouvons réaliser exactement cela avec un sémaphore. De plus, nous implémentons des moniteurs (ou au moins une possibilité de les implémenter) avec des sémaphores.
Alors pourquoi devrais-je implémenter quelque chose qui fait exactement la même chose qu'un sémaphore avec un sémaphore? Quels avantages puis-je obtenir?
la source
Nous avons finalement discuté de la raison pour laquelle vous utiliseriez un moniteur au lieu d'un sémaphore dans la conférence d'aujourd'hui.
Cela se résume essentiellement à ceci: le moniteur et le sémaphore sont également expressifs, ce qui signifie que vous pouvez trouver une solution à un problème avec un moniteur où à l'origine un sémaphore était utilisé et vice versa.
Eh bien, nous le savions déjà, alors pourquoi utiliseriez-vous un moniteur au lieu d'un sémaphore?
Préférence personnelle. Normalement, une application de bureau utiliserait des moniteurs, laissant moins de possibilités d'erreurs, mais, en contrepartie, ayant une structure relativement gonflée. Les sémaphores, d'autre part, sont souvent utilisés dans les systèmes d'exploitation, car ils sont une structure légère, mais laissant plus de possibilités d'erreurs.
Je suppose que nous pouvons conclure que c'est une décision situationnelle, que vous ayez besoin ou non d'utiliser un moniteur ou un sémaphore. Si vous construisez un système en temps réel, vous voudrez peut-être utiliser un sémaphore, si vous construisez un programme de bureau, vous pouvez également utiliser un moniteur.
la source
Jetez un œil à par exemple "Le petit livre des sempaphores"par Allen B. Downey. il indique et résout de nombreux problèmes de synchronisation. Vérifiez particulièrement les solutions bâclées, et vous verrez que les sémaphores sont un mécanisme de très bas niveau, très puissant mais extrêmement facile à utiliser, où les erreurs simples ont de terribles conséquences (aggravées par le fonctionnement non déterministe inhérent des programmes concurrents). Il est par exemple facile d'oublier de forcer l'exclusion mutuelle, d'opérer sur le mauvais sémaphore, etc. Les moniteurs offrent des solutions préemballées pour les cas les plus souvent utilisés, et emportent avec eux la plupart des avantages de la programmation orientée objet (c.-à-d., Vous savez que la seule façon de jouer avec les variables gérées par le moniteur est à travers ses opérations). L'inconvénient est qu'ils ne peuvent pas être installés facilement dans des langages non orientés objet,
la source