Różnica między semaforem a muteksem

Różnica między semaforem a muteksem
Różnica między semaforem a muteksem

Wideo: Różnica między semaforem a muteksem

Wideo: Różnica między semaforem a muteksem
Wideo: Takie polowania to rzadkość w świecie zwierząt! [Wrogi świat] 2024, Listopad
Anonim

Semafor kontra Mutex

Semafor to struktura danych używana do zapewnienia, że wiele procesów nie będzie jednocześnie uzyskiwać dostępu do wspólnego zasobu lub sekcji krytycznej w środowiskach programowania równoległego. Semafory są używane, aby uniknąć martwych zamków i warunków wyścigu. Mutex (obiekt wzajemnego wykluczenia) służy również do unikania jednoczesnego dostępu do wspólnego zasobu przez kilka współbieżnych procesów.

Co to jest semafor?

Semafor to struktura danych służąca do wzajemnego wykluczania krytycznych sekcji. Semafory obsługują głównie dwie operacje zwane wait (historycznie znane jako P) i signal (historycznie znane jako V). Operacja oczekiwania blokuje proces do momentu otwarcia semafora, a operacja sygnału zezwala na wejście innego procesu (wątku). Każdy semafor jest powiązany z kolejką oczekujących procesów. Gdy operacja oczekiwania jest wywoływana przez wątek, jeśli semafor jest otwarty, wątek może kontynuować. Jeśli semafor jest zamknięty, gdy operacja oczekiwania jest wywoływana przez wątek, wątek jest blokowany i musi czekać w kolejce. Operacja sygnału otwiera semafor i jeśli w kolejce znajduje się już wątek, proces ten może kontynuować, a jeśli w kolejce nie ma wątków oczekujących, sygnał jest zapamiętywany dla następnych wątków. Istnieją dwa rodzaje semaforów zwane semaforami muteksowymi i semaforami liczącymi. Semafory Mutex umożliwiają pojedynczy dostęp do zasobu, a semafory liczące umożliwiają wielu wątkom dostęp do zasobu (który ma dostępnych kilka jednostek).

Co to jest Mutex?

Po uruchomieniu aplikacja komputerowa utworzy muteks i dołączy go do zasobu. Gdy zasób jest używany przez wątek, jest on zablokowany i inne wątki nie mogą z niego korzystać. Jeśli inny wątek chce użyć tego samego zasobu, będzie musiał wykonać żądanie. Następnie ten wątek zostanie umieszczony w kolejce, dopóki pierwszy wątek nie zostanie zakończony z zasobem. Po zakończeniu pierwszego wątku z zasobem blokada zostanie usunięta, a wątek oczekujący w kolejce może uzyskać dostęp do zasobu. Jeśli w kolejce czeka wiele wątków, dostęp do nich jest przydzielany na zasadzie rotacji. Praktycznie, gdy muteks zmienia dostęp do zasobu między kilkoma wątkami, będzie to widoczne, ponieważ wiele wątków zużywa zasób w tym samym czasie. Ale wewnętrznie tylko jeden wątek uzyskuje dostęp do zasobu w danym momencie.

Jaka jest różnica między Semaphore a Mutex?

Mimo że zarówno semafory, jak i obiekty mutex są używane do osiągnięcia wzajemnego wykluczania w środowiskach programowania równoległego, mają one pewne różnice. Obiekt mutex pozwala tylko pojedynczemu wątkowi na wykorzystanie zasobu lub sekcji krytycznej, podczas gdy semafory pozwalają na ograniczoną liczbę jednoczesnych dostępów do zasobu (poniżej maksymalnej dozwolonej liczby). W przypadku obiektów mutex inne wątki, które chcą uzyskać dostęp do zasobu, muszą czekać w kolejce, aż bieżący wątek zakończy korzystanie z zasobu.

Zalecana: