Różnica między semaforem a muteksem

Semafor kontra Mutex

Semafor to struktura danych używana do zapewnienia, że ​​wiele procesów nie ma dostępu do wspólnego zasobu lub sekcji krytycznej w tym samym czasie w równoległych środowiskach programowania. Semafory służą do unikania martwych blokad i warunków wyścigu. Mutex (obiekt wzajemnego wykluczenia) służy również do unikania dostępu do wspólnego zasobu w tym samym czasie 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 oczekiwaniem (historycznie znane jako P) i sygnałowe (historycznie znane jako V). Operacja oczekiwania blokuje proces, aż semafor jest otwarty, a operacja sygnału umożliwia wejście do innego procesu (wątku). Każdy semafor jest powiązany z kolejką oczekujących procesów. Gdy wątek wywoła operację oczekiwania, jeśli semafor jest otwarty, wątek może być kontynuowany. Jeśli semafor jest zamknięty, gdy wątek wywołuje operację oczekiwania, wątek jest blokowany i musi czekać w kolejce. Operacja na sygnale otwiera semafor, a jeśli w kolejce już czeka wątek, proces ten może być kontynuowany, a jeśli w kolejce nie ma wątków, sygnał jest zapamiętywany dla następnych wątków. Istnieją dwa typy semaforów zwane semaforami mutex i semaforami liczącymi. Semafory Mutex umożliwiają pojedynczy dostęp do zasobu, a zliczanie semaforów umożliwia dostęp do zasobu wielu wątkom (który ma kilka dostępnych jednostek).

Co to jest Mutex?

Po uruchomieniu aplikacji komputerowej tworzy muteks i dołącza 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ł złożyć żądanie. Następnie ten wątek zostanie umieszczony w kolejce, aż pierwszy wątek zostanie zakończony 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, mają one dostęp w sposób rotacyjny. Praktycznie, gdy muteks naprzemiennie ma dostęp do zasobu między kilkoma wątkami, będzie widoczny, ponieważ wiele wątków zużywa zasób jednocześnie. 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 muteksów są używane do wzajemnego wykluczenia w środowiskach programowania równoległego, istnieją pewne różnice. Obiekt mutex pozwala tylko jednemu wątkowi zużywać zasób lub sekcję krytyczną, podczas gdy semafory zezwalają 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 się przy użyciu zasobu.