Różnica między mutexem a semaforem
- 3439
- 473
- Maksym Cieślik
Mutex vs semafor
Mutex jest analogiczny do jednego klucza do pokoju. Osoba trzymająca klucz, który jest analogiczny do wątku, jest jedyną, która może mieć dostęp do pokoju. Osoba z dostępem będzie musiała zrezygnować z klucza do następnej osoby w kolejce. Dlatego mutex może być uwalniany tylko przez wątek, który go nabywa.
Mutex jest zwykle używany do serializacji dostępu do sekcji kodu ponownego entrantów „„ rodzaj kodu, który nie może być wykonywany przez kilka wątków jednocześnie. Tylko jeden wątek jest wpuszczony w sekcję. To zmusza inne wątki w kolejce do czekającego. Zanim wątek uzyska dostęp, będzie musiał poczekać do wątku, zanim zrezygnuje z sekcji.
Korzystając z tej samej analogii w Mutex, 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 dwa opuszczą pokój, wówczas liczba to dwa, a dwa klucze są podawane dwa kolejne w kolejce.
Biorąc to pod uwagę, semafory mogą być jednocześnie sygnalizowane przez dowolny wątek lub proces i są idealne do aplikacji wymagających synchronizacji. Niemniej jednak semafory są wykorzystywane do skutecznego ograniczenia liczby współbieżnych użytkowników wspólnego zasobu w oparciu o maksymalną liczbę semaforów.
Zasadniczo Mutex można uznać za semafor o wartości jednego.
Zmniejszenie i przyrost semaforu zależy od tego, czy wątki żądają dostępu do wspólnego zasobu, czy opuszczenie sekcji.
Teoretycznie mutex i (binarne) semafory są semantycznie podobne.Wdrożenie mutex można wykonać za pomocą semafory, podobnie jak na odwrót. Jednak w praktycznym sensie mogą być nieco inne.
Mutexy mają być stosowane tylko do wzajemnego wykluczenia, a semafory binarne mają być stosowane do wzajemnego wykluczenia i powiadomienia o zdarzeniu. Chociaż są bardzo podobne pod względem wdrażania i ogólnej semantyki, są one używane inaczej.
Streszczenie:
1. Mutex jest zwykle używany do serializacji dostępu do wspólnego zasob.
2. Mutex jest jak semafor z liczbą jednego.
3. Mutex umożliwia tylko pojedyncze wątku mieć dostęp, podczas gdy semafory mogą być jednocześnie sygnalizowane przez dowolny wątek lub proces.
4. Semafory są idealne do synchronizacji i często wykorzystywane do powiadomienia zdarzenia i wzajemnego wykluczenia, podczas gdy Mutex jest stosowany tylko do wzajemnego wykluczenia.