Obecnie uczęszczam na kurs programowania równoległego na moim uniwersytecie, a ostatnio zaczęliśmy rozmawiać o koncepcji monitora. Chociaż rozumiem potrzebę wzajemnego wykluczenia, nie rozumiem, dlaczego miałbym do tego używać monitora.
Jak rozumiem, monitor gwarantuje, że dokładnie jeden proces lub żaden proces nie znajduje się w sekcji krytycznej przez cały czas. Dokładnie to możemy osiągnąć semaforem. Ponadto wdrażamy monitory (lub przynajmniej jedną możliwością ich wdrożenia) z semaforami.
Dlaczego więc miałbym implementować coś, co robi dokładnie to samo, co semafor z semaforem? Jakie świadczenia otrzymam?
źródło
W końcu dyskutowaliśmy, dlaczego w dzisiejszym wykładzie miałbyś używać monitora zamiast semafora.
Zasadniczo sprowadza się to do tego: monitor i semafor są równie ekspresyjne, co oznacza, że możesz znaleźć rozwiązanie problemu z monitorem, w którym pierwotnie użyto semafora i odwrotnie.
Cóż, już to wiedzieliśmy, więc dlaczego miałbyś używać monitora zamiast semafora?
Osobiste preferencje. Zwykle aplikacja komputerowa używałaby monitorów, co pozostawia mniej możliwości pomyłek, ale jako kompromis ma relatywnie rozdętą strukturę. Z drugiej strony semafory są często używane w systemach operacyjnych, ponieważ są lekką strukturą, ale pozostawiają więcej możliwości pomyłek.
Sądzę, że możemy stwierdzić, że jest to decyzja sytuacyjna, czy nie potrzebujesz / chcesz użyć monitora lub semafora. Jeśli budujesz system czasu rzeczywistego, możesz chcieć iść z semaforem, jeśli budujesz program biurowy, możesz również iść z monitorem.
źródło
Rzuć okiem np. „Mała księga sempaphores”autor: Allen B. Downey. stwierdza i rozwiązuje wiele problemów z synchronizacją. Sprawdź szczególnie nieuczciwe rozwiązania, a zobaczysz, że semafory są mechaizmem na bardzo niskim poziomie, bardzo potężnym, ale niezwykle łatwym do niewłaściwego użycia, w którym proste błędy mają straszne konsekwencje (jeszcze gorsze z powodu nieodłącznego niedeterministycznego działania współbieżnych programów). Łatwo jest np. Zapomnieć o wymuszaniu wzajemnego wykluczenia, operowaniu niewłaściwym semaforem i tak dalej. Monitory oferują paczkowane rozwiązania najczęściej używanych przypadków i niosą ze sobą większość zalet programowania obiektowego (tzn. Wiesz, że jedynym sposobem na bałagan ze zmiennymi zarządzanymi przez monitor są jego operacje). Wadą jest to, że nie można ich łatwo zainstalować w językach innych niż zorientowane obiektowo,
źródło