Jakie są główne różnice między monitorem a semaforem ?
multithreading
semaphore
monitor
użytkownik919860
źródło
źródło
Odpowiedzi:
Monitora to obiekt zaprojektowany, aby uzyskać dostęp z wielu wątków. Funkcje lub metody elementu monitorowanego obiektu wymuszą wzajemne wykluczenie, więc tylko jeden wątek może wykonywać dowolną akcję na obiekcie w danym momencie. Jeśli jeden wątek aktualnie wykonuje funkcję elementu tego obiektu, każdy inny wątek, który próbuje wywołać funkcję elementu tego obiektu, będzie musiał poczekać, aż pierwszy element się zakończy.
Semafora jest obiektem niższego poziomu. Możesz za pomocą semafora zaimplementować monitor. Semafor zasadniczo jest tylko licznikiem. Gdy licznik jest dodatni, jeśli wątek próbuje uzyskać semafor, jest to dozwolone, a licznik jest zmniejszany. Po zakończeniu wątku zwalnia semafor i zwiększa licznik.
Jeśli licznik ma już zero, gdy wątek próbuje uzyskać semafor, musi poczekać, aż inny wątek zwolni semafor. Jeśli wiele wątków czeka, gdy wątek zwolni semafor, jeden z nich go otrzyma. Wątek, który zwalnia semafor, nie musi być tym samym, który go pozyskał.
Monitor jest jak toaleta publiczna. Jednocześnie może wejść tylko jedna osoba. Zamykają drzwi, aby nikt nie wszedł do środka, robią swoje, a następnie otwierają je, kiedy wychodzą.
Semafor jest jak wypożyczalnia rowerów. Mają pewną liczbę motocykli. Jeśli spróbujesz wypożyczyć rower, który ma go za darmo, możesz go zabrać, w przeciwnym razie musisz poczekać. Gdy ktoś zwróci rower, ktoś inny może go zabrać. Jeśli masz rower, możesz go oddać komuś innemu - wypożyczalnia rowerów nie dba o to, kto go zwróci, pod warunkiem, że odzyska rower.
źródło
Poniższe wyjaśnienie faktycznie wyjaśnia, w jaki sposób wait () i signal () monitora różnią się od P i V semafora.
Wait () i sygnał () operacje na zmiennych warunkowych w monitorze są podobne do P i V operacji na liczenie semaforów .
Instrukcja wait może blokować wykonanie procesu, natomiast instrukcja signal może spowodować odblokowanie innego procesu. Istnieją jednak pewne różnicemiędzy nimi. Kiedy proces wykonuje operację P, niekoniecznie blokuje ten proces, ponieważ semafor zliczający może być większy niż zero. W przeciwieństwie do tego, gdy wykonywana jest instrukcja wait, zawsze blokuje ona proces. Kiedy zadanie wykonuje operację V na semaforze, albo odblokowuje zadanie oczekujące na tym semaforze, albo zwiększa licznik semaforów, jeśli nie ma zadania do odblokowania. Z drugiej strony, jeśli proces wykonuje instrukcję sygnału, gdy nie ma innego procesu do odblokowania, nie ma to wpływu na zmienną warunkową. Inną różnicą między semaforami i monitorami jest to, że użytkownicy obudzeni przez operację V mogą natychmiast wznowić wykonywanie. Przeciwnie, użytkownicy budzeni przez operację sygnału są restartowani dopiero po odblokowaniu monitora. Dodatkowo,
Link: tutaj do dalszego czytania. Mam nadzieję, że to pomoże.
źródło
Odpowiedź w jednym wierszu:
Monitor: kontroluje tylko JEDEN wątek na raz, który można wykonać na monitorze. (trzeba uzyskać blokadę, aby wykonać pojedynczy wątek)
Semafor: blokada, która chroni udostępniony zasób. (trzeba uzyskać blokadę, aby uzyskać dostęp do zasobu)
źródło
Semafor umożliwia dostęp do wspólnego obiektu wielu wątkom (do określonej liczby). Monitory umożliwiają wzajemnie wykluczający się dostęp do współdzielonego obiektu.
Monitor
Semafor
źródło
java.util.ArrayList
: czy jest to obiekt czy kontener wielu obiektów? Cóż, oba są jednocześnie. Czy semafor jest odpowiedni do kontrolowania dostępu do niego? Powiedziałbym: nie.Gdy semafor jest używany do ochrony obszaru krytycznego, nie ma bezpośredniego związku między semaforem a chronionymi danymi. Jest to jeden z powodów, dla których semafory mogą być rozproszone wokół kodu, i dlatego łatwo jest zapomnieć o wywołaniu oczekiwania lub powiadomienia , w którym to przypadku odpowiednio, będzie to naruszać wzajemne wykluczenie lub trwale zablokować zasób.
W przeciwieństwie do tych złych rzeczy może się zdarzyć na monitorze. Monitor jest zmęczony bezpośrednio danymi (hermetyzuje dane), a ponieważ operacje monitora są akcjami atomowymi, nie można napisać kodu, który może uzyskać dostęp do danych bez wywołania protokołu wejścia. Protokół wyjścia jest wywoływany automatycznie po zakończeniu operacji monitorowania.
Monitor ma wbudowany mechanizm synchronizacji warunków w postaci zmiennej warunkowej przed kontynuowaniem. Jeśli warunek nie jest spełniony, proces musi poczekać, aż zostanie powiadomiony o zmianie warunku. Gdy proces oczekuje na synchronizację warunków, implementacja monitora zajmuje się kwestią wzajemnego wykluczenia i umożliwia inny proces uzyskania dostępu do monitora.
Zaczerpnięty z The Open University M362 Unit 3 „Interacting process” materiał kursu.
źródło
Semafor:
Użycie licznika lub flagi do kontroli dostępu do niektórych zasobów współdzielonych w systemie współbieżnym oznacza użycie semafora .
Przykład:
Flagi ujawniają tylko bieżący stan zasobu, brak liczby lub inne informacje o obiektach oczekujących lub działających w zasobie.
Monitor:
monitora synchronizuje dostęp do obiektu poprzez komunikowanie się z wątków zainteresowany tym obiektem, z prośbą o dostęp do nabywania lub czekać na jakiś warunek, by stać się prawdą.
Przykład:
źródło