Mutex vs Semaphore: Jaka jest różnica?

Spisie treści:

Anonim

Co to jest semafor?

Semafor to po prostu zmienna nieujemna i współdzielona między wątkami. Semafor jest mechanizmem sygnalizacyjnym, a wątek oczekujący na semafor może być sygnalizowany przez inny wątek. Wykorzystuje dwie operacje atomowe, 1) czekaj i 2) sygnał do synchronizacji procesu.

Semafor zezwala lub nie zezwala na dostęp do zasobu, w zależności od konfiguracji.

W tym samouczku dowiesz się:

  • Co to jest Mutex?
  • Korzystanie z semafora
  • Korzystanie z Mutex
  • Różnica między Semaphore a Mutex
  • Typowe nieporozumienia dotyczące muteksu i semafora
  • Zalety semafora
  • Zalety Mutex
  • Wada semaforów
  • Wady Mutex

Co to jest Mutex?

Pełna forma Mutex to wzajemne wykluczenie. Jest to specjalny rodzaj binarnego semafora, który służy do kontrolowania dostępu do współdzielonego zasobu. Zawiera mechanizm dziedziczenia priorytetów, aby uniknąć problemów z rozszerzoną inwersją priorytetów. Pozwala to na utrzymanie aktualnych zadań o wyższym priorytecie w stanie zablokowanym przez możliwie najkrótszy czas. Jednak dziedziczenie priorytetów nie koryguje inwersji priorytetów, a jedynie minimalizuje jej efekt.

KLUCZOWA RÓŻNICA

  • Mutex to mechanizm blokujący, podczas gdy Semaphore to mechanizm sygnalizacyjny
  • Mutex to tylko obiekt, podczas gdy Semaphore jest liczbą całkowitą
  • Mutex nie ma podtypu, podczas gdy Semaphore ma dwa typy, które liczą semafor i semafor binarny.
  • Semafor obsługuje modyfikację operacji oczekiwania i sygnału, podczas gdy Mutex jest modyfikowany tylko przez proces, który może zażądać lub zwolnić zasób.
  • Wartość semafora jest modyfikowana za pomocą operacji wait () i signal (), z drugiej strony operacje Mutex są blokowane lub odblokowywane.

Korzystanie z semafora

W przypadku pojedynczego bufora możemy podzielić bufor 4 KB na cztery bufory 1 KB. Z tymi czterema buforami można skojarzyć semafor. Pozwala to użytkownikom i producentom na jednoczesną pracę na różnych buforach.

Korzystanie z Mutex

Mutex zapewnia wzajemne wykluczenie, którym może być producent lub konsument, który może mieć klucz (mutex) i kontynuować swoją pracę. Dopóki producent wypełnia bufor, użytkownik musi czekać i odwrotnie. W Mutex lock cały czas tylko jeden wątek może pracować z całym buforem.

Różnica między Semaphore a Mutex

Parametry Semafor Mutex
Mechanizm Jest to rodzaj mechanizmu sygnalizacyjnego. Jest to mechanizm blokujący.
Typ danych Semafor to zmienna całkowita. Mutex to tylko przedmiot.
Modyfikacja Operacje oczekiwania i sygnału mogą modyfikować semafor. Jest modyfikowany tylko przez proces, który może zażądać zasobu lub go zwolnić.
Zarządzanie zasobami Jeśli żaden zasób nie jest wolny, proces wymaga zasobu, który powinien wykonać operację oczekiwania. Powinien poczekać, aż liczba semaforów będzie większa niż 0. Jeśli jest zablokowany, proces musi czekać. Proces powinien znajdować się w kolejce. Dostęp do tego należy uzyskać tylko wtedy, gdy mutex jest odblokowany.
Wątek Możesz mieć wiele wątków programu. Możesz mieć wiele wątków programu w muteksie, ale nie jednocześnie.
Własność Wartość można zmienić poprzez zwolnienie lub uzyskanie zasobu w dowolnym procesie. Blokada obiektu jest zwalniana tylko przez proces, który uzyskał na nim blokadę.
Rodzaje Typy semaforów to semafor liczący i semafor binarny. Mutex nie ma podtypów.
Operacja Wartość semafora jest modyfikowana za pomocą operacji wait () i signal (). Obiekt mutex jest zablokowany lub odblokowany.
Zajęcie zasobów Jest zajęty, jeśli wszystkie zasoby są używane, a proces żądający zasobu wykonuje operację wait () i blokuje się, aż liczba semaforów osiągnie wartość> 1. W przypadku, gdy obiekt jest już zablokowany, proces żądający zasobów czeka i jest umieszczany w kolejce przez system przed zwolnieniem blokady.

Typowe fakty dotyczące muteksu i semafora

Oto kilka typowych faktów dotyczących Mutex i Semaphore:

  • Tylko jedno zadanie może zdobyć muteks. Tak więc istnieje powiązanie własności z muteksem i tylko właściciel może zwolnić muteks.
  • Powody używania muteksu i semafora są różne, być może z powodu podobieństwa w ich implementacji, muteks byłby określany jako semafor binarny.
  • Jednym z bardzo znanych nieporozumień jest to, że muteksy i semafory są prawie takie same, z tą różnicą, że muteks może liczyć do 1, podczas gdy semafory mogą liczyć od 0 do N.
  • Zawsze istnieje niepewność między semaforem binarnym a muteksem. Możesz usłyszeć, że mutex jest semaforem binarnym, co nie jest poprawne.

Zalety semafora

Oto zalety / zalety korzystania z Semaphore:

  • Umożliwia dostęp do sekcji krytycznej więcej niż jednemu wątkowi
  • Semafory są niezależne od komputera.
  • Semafory są implementowane w niezależnym od maszyny kodzie mikrojądra.
  • Nie pozwalają na wejście wielu procesów do sekcji krytycznej.
  • Ponieważ jest zajęty czekaniem w semaforze, nigdy nie dochodzi do marnotrawstwa czasu i zasobów procesu.
  • Są niezależne od komputera i powinny być uruchamiane w niezależnym od maszyny kodzie mikrojądra.
  • Pozwalają na elastyczne zarządzanie zasobami.

Zalety Mutex

Oto ważne zalety / zalety Mutex

  • Muteksy to po prostu proste blokady uzyskiwane przed wejściem do jego krytycznej sekcji, a następnie zwolnieniem.
  • Ponieważ w danej chwili tylko jeden wątek znajduje się w sekcji krytycznej, nie ma warunków wyścigu, a dane zawsze pozostają spójne.

Wada semaforów

Oto wady / wady semafora

  • Jednym z największych ograniczeń semafora jest inwersja priorytetu.
  • System operacyjny musi śledzić wszystkie wywołania, aby czekać i sygnalizować semafor.
  • Ich użycie nigdy nie jest egzekwowane, ale jest to tylko konwencją.
  • Aby uniknąć zakleszczeń w semaforze, operacje Wait i Signal wymagają wykonania we właściwej kolejności.
  • Programowanie semaforów jest metodą złożoną, więc istnieje szansa, że ​​nie dojdzie do wzajemnego wykluczenia.
  • Nie jest to również praktyczna metoda do zastosowań na dużą skalę, ponieważ ich stosowanie prowadzi do utraty modułowości.
  • Semafor jest bardziej podatny na błąd programisty.
  • Może to spowodować zakleszczenie lub naruszenie zasady wzajemnego wykluczania z powodu błędu programisty.

Wady Mutex

Oto wady / wady Mutexu

  • Jeśli wątek uzyskuje blokadę i przechodzi w stan uśpienia lub jest wywłaszczany, drugi wątek może nie być w stanie przejść do przodu. Może to prowadzić do głodu.
  • Nie można go zablokować ani odblokować z innego kontekstu niż ten, który go nabył.
  • Jednocześnie w sekcji krytycznej powinien być dozwolony tylko jeden wątek.
  • Normalna implementacja może prowadzić do zajętości stanu oczekiwania, co powoduje marnowanie czasu procesora.