Mutex i Semafor

Anonim

Mutex vs Semaphore

Muteks jest analogiczny do pojedynczego klucza do pokoju. Osoba posiadająca klucz, który jest analogiczny do nici, jest jedyną osobą, która może mieć dostęp do pokoju. Osoba z dostępem będzie wówczas musiała oddać klucz następnej osobie w linii. Dlatego muteks może zostać zwolniony tylko przez wątek, który go nabywa.

Muteks jest zwykle używany do serializowania dostępu do sekcji kodu zwrotnego "" rodzaju kodu, który nie może być wykonany przez kilka wątków naraz. Do sekcji dozwolony jest tylko jeden wątek. Zmusza to inne wątki w kolejce do oczekiwania. Zanim wątek uzyska dostęp, będzie musiał poczekać do wątku, zanim zrezygnuje z sekcji.

Używając tej samej analogii w muteksie, semafory są liczbą podobnych kluczy, które mają dostęp do tej samej liczby pokoi z podobnymi zamkami. Semafor lub wartość semafora będzie zależeć od liczby osób (wątków), które wchodzą lub wychodzą z pokoju. Jeśli jest 5 pokoi i wszystkie są zajęte, wtedy liczba semaforów wynosi zero. Jeśli dwóch opuści pokój, liczba ta wynosi dwa, a dwa klucze zostaną przekazane kolejnej dwójce w kolejce.

Dzięki temu semafory mogą być jednocześnie sygnalizowane przez dowolny wątek lub proces i są idealne dla aplikacji wymagających synchronizacji. Niemniej jednak semafory są używane do skutecznego ograniczania liczby jednoczesnych użytkowników wspólnego zasobu w oparciu o maksymalną liczbę semaforów.

Więc właściwie mutex można uznać za semafor o wartości jednego.

Dekrementacja i przyrost semafora zależą od tego, czy wątki żądają dostępu do wspólnego zasobu, czy też opuszczają sekcję.

Teoretycznie, semafory mutex i (binarne) są semantycznie podobne. Implementację mutex można przeprowadzić za pomocą semaforów i tak jest na odwrót. Jednak w sensie praktycznym mogą być nieco inne.

Muteksy mają być stosowane wyłącznie do wzajemnego wykluczania, a binarne semafory są przeznaczone do wzajemnego wykluczania i powiadamiania o zdarzeniach. Chociaż są one bardzo podobne pod względem implementacji i ogólnej semantyki, są one używane w różny sposób.

Streszczenie:

1. Mutex jest zwykle używany do serializowania dostępu do wspólnego zasobu, podczas gdy semafor jest liczbą jednoczesnych dostępów.

2. Mutex jest jak semafor z liczbą jeden. 3. Mutex pozwala tylko na dostęp do pojedynczego wątku, podczas gdy semafory mogą być jednocześnie sygnalizowane przez dowolny wątek lub proces.

4. Semafory są idealne do synchronizacji i często używane do powiadamiania o zdarzeniach i wzajemnego wykluczania, podczas gdy muteks jest stosowany tylko do wzajemnego wykluczania.