Mutex vs Semaphore
Muteks jest analogiczny do jednego klucza do pokoju. Jedynie osoba posiadająca klucz, analogiczny do wątku, może mieć dostęp do pokoju. Osoba z dostępem będzie musiała oddać klucz kolejnej osobie w kolejce. Dlatego muteks może zostać zwolniony tylko przez wątek, który go pozyskuje.
Muteks jest zwykle używany do szeregowania dostępu do sekcji kodu ponownego wysyłania „rodzaju kodu, którego nie można wykonać kilkoma wątkami jednocześnie. Tylko jeden wątek jest dozwolony w sekcji. To zmusza pozostałe wątki do oczekiwania. Zanim wątek uzyska dostęp, będzie musiał poczekać, aż wątek opuści sekcję.
Korzystając z tej samej analogii w muteksie, semafory to liczba podobnych kluczy, które mogą uzyskać dostęp do tej samej liczby pokoi z podobnymi zamkami. Semafor lub wartość liczby semaforów 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, liczba semaforów wynosi zero. Jeśli dwóch wyjdzie z pokoju, liczba będzie równa dwa, a dwa klucze zostaną przekazane dwóm kolejnym w kolejce.
Biorąc to pod uwagę, 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żą do skutecznego ograniczania liczby współbieżnych użytkowników wspólnego zasobu na podstawie maksymalnej liczby semaforów.
Zasadniczo muteks można uznać za semafor o wartości jeden.
Zmniejszenie i przyrost semafora zależą od tego, czy wątki żądają dostępu do wspólnego zasobu, czy opuszczają sekcję.
Teoretycznie muteks i (binarne) semafory są semantycznie podobne. Implementacja muteksu może odbywać się za pomocą semaforów i podobnie jest na odwrót. Jednak w sensie praktycznym mogą być nieco inne.
Muteksy są przeznaczone wyłącznie do wzajemnego wykluczania, a semafory binarne są przeznaczone do wzajemnego wykluczania i powiadamiania o zdarzeniach. Mimo że są bardzo podobne pod względem implementacji i ogólnej semantyki, są używane w różny sposób.
Streszczenie:
1. Mutex jest zwykle używany do szeregowania dostępu do wspólnego zasobu, podczas gdy semafor jest liczbą równoczesnych dostępów.
2. Mutex jest jak semafor z liczbą jeden.
3. Mutex pozwala na dostęp tylko do jednego 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 są używane do powiadamiania o zdarzeniach i wzajemnego wykluczania, podczas gdy muteks stosuje się tylko do wzajemnego wykluczania.