Zalecane, 2019

Wybór Redakcji

Różnica między Semaphore i Mutex

Synchronizacja procesów odgrywa ważną rolę w utrzymaniu spójności udostępnianych danych. Zarówno oprogramowanie, jak i rozwiązania sprzętowe są dostępne do rozwiązywania krytycznych problemów z sekcjami. Ale rozwiązania sprzętowe dla krytycznych problemów z sekcjami są dość trudne do wdrożenia. W dzisiejszym artykule omówimy dwa rozwiązania oparte na oprogramowaniu do obsługi krytycznego problemu z sekcjami, np. Semaphore i Mutex.

Podstawową różnicą między semaforem i muteksem jest to, że semafor jest mechanizmem sygnalizacyjnym, tj. Procesy wykonują operację wait () i signal (), aby wskazać, czy nabywają lub zwalniają zasób, podczas gdy Mutex jest mechanizmem blokującym, proces musi uzyskać blokadę obiekt mutex, jeśli chce zdobyć zasób. Istnieje więcej różnic między semaforami i muteksami, omówmy je za pomocą poniższego wykresu porównawczego.

Wykres porównania

Podstawa do porównaniaSemaforMutex
PodstawowySemafor jest mechanizmem sygnalizacyjnym.Mutex jest mechanizmem blokującym.
IstnienieSemafor jest zmienną całkowitą.Mutex jest obiektem.
FunkcjonowaćSemafor pozwala wielu wątkom programu na dostęp do skończonej instancji zasobów.Mutex umożliwia wielu wątkom programu dostęp do pojedynczego zasobu, ale nie jednocześnie.
WłasnośćWartość semafora może być zmieniona przez dowolny proces pozyskiwania lub zwalniania zasobu.Blokada obiektu Mutex jest zwalniana tylko przez proces, który uzyskał blokadę.
KategoryzowaćSemafor można podzielić na semafor i semafor binarny.Mutex nie jest dalej klasyfikowany.
OperacjaWartość semafora jest modyfikowana za pomocą funkcji wait () i signal ().Obiekt Mutex jest zablokowany lub odblokowany przez proces żądający lub zwalniający zasób.
Zajęte zasobyJeśli wszystkie zasoby są używane, proces żądający zasobu wykonuje operację wait () i blokuje się, aż liczba semaforów stanie się większa niż jeden.Jeśli obiekt mutex jest już zablokowany, proces żądający zasobów czeka i czeka w kolejce do momentu zwolnienia blokady.

Definicja semafora

Semafor to narzędzie do synchronizacji procesów. Semafor jest zazwyczaj zmienną całkowitą S, która jest inicjalizowana do liczby zasobów obecnych w systemie, a wartość semafora może być modyfikowana tylko przez dwie funkcje wait () i signal () oprócz inicjalizacji.

Operacje wait () i signal () modyfikują wartość semafora nierozdzielnie . Oznacza to, że gdy proces modyfikuje wartość semafora, żaden inny proces nie może jednocześnie modyfikować wartości semafora. Semafor wyróżnia system operacyjny w dwóch kategoriach Zliczanie semaforów i semaforów binarnych .

W Counting Semaphore wartość semafora S jest inicjowana do liczby zasobów obecnych w systemie. Ilekroć proces chce uzyskać dostęp do zasobu, wykonuje operację wait () na semaforze i dekrementuje wartość semafora o jeden. Po zwolnieniu zasobu wykonuje operację signal () na semaforze i zwiększa wartość semafora o jeden. Gdy liczba semaforów wynosi 0, oznacza to, że wszystkie zasoby są zajęte przez procesy. Jeśli proces wymaga użycia zasobu, gdy liczba semaforów wynosi 0, wykonuje on funkcję wait () i zostaje zablokowana, aż wartość semafora stanie się większa niż 0.

W semaforze binarnym wartość semafora wynosi od 0 do 1 . Jest podobny do blokady mutex, ale mutex jest mechanizmem blokującym, podczas gdy semafor jest mechanizmem sygnalizacyjnym. W semaforze binarnym, jeśli proces chce uzyskać dostęp do zasobu, wykonuje operację wait () na semaforze i dekrementuje wartość semafora od 1 do 0. Kiedy zwalnia zasób, wykonuje operację signal () na semaforze i inkrementach jego wartość wynosi 1. Jeśli wartość semafora wynosi 0, a proces chce uzyskać dostęp do zasobu, wykonuje operację wait () i blokuje się, dopóki bieżący proces wykorzystujący zasoby nie zwalnia zasobu.

Definicja Mutex

Obiekt Wzajemnego Wykluczenia jest krótko nazywany Mutex. Od terminu wzajemnego wykluczenia rozumiemy, że tylko jeden proces na raz może uzyskać dostęp do danego zasobu. Obiekt mutex pozwala wielu wątkom programu używać tego samego zasobu, ale jednocześnie nie jednocześnie.

Po uruchomieniu program żąda, aby system utworzył obiekt mutex dla danego zasobu. System tworzy obiekt mutex z unikalną nazwą lub identyfikatorem. Za każdym razem, gdy wątek programu chce użyć zasobu, który zajmuje blokadę obiektu mutex, wykorzystuje zasób, a po użyciu uwalnia blokadę obiektu mutex. Następnie następny proces może uzyskać blokadę obiektu mutex.

Tymczasem proces uzyskał blokadę obiektu mutex, żaden inny wątek / proces nie może uzyskać dostępu do tego zasobu. Jeśli obiekt mutex jest już zablokowany, proces żądający pozyskania blokady obiektu mutex musi czekać i jest ustawiany w kolejce przez system do czasu odblokowania obiektu mutex.

Kluczowe różnice między Semaphore i Mutex

  1. Semafor jest mechanizmem sygnalizacyjnym, ponieważ operacja wait () i signal () wykonywana na zmiennej semafora wskazuje, czy proces uzyskuje zasoby, czy zwalnia zasoby. Z drugiej strony, muteks jest mechanizmem blokującym, ponieważ aby uzyskać zasób, proces musi zablokować obiekt mutex i podczas zwalniania procesu zasobów musi odblokować obiekt mutex.
  2. Semafor jest zwykle zmienną całkowitą, podczas gdy mutex jest obiektem .
  3. Semafor umożliwia wielu wątkom programu dostęp do skończonej instancji zasobów . Z drugiej strony Mutex umożliwia wielu wątkom programowym dostęp do pojedynczego udostępnionego zasobu, ale po jednym na raz.
  4. Wartość zmiennej semafora może być modyfikowana przez dowolny proces, który pozyskuje lub zwalnia zasoby, wykonując operację wait () i signal (). Z drugiej strony, zamek pobrany na obiekcie mutex może zostać zwolniony tylko przez proces, który uzyskał blokadę obiektu mutex.
  5. Semafor składa się z dwóch typów: semafora i semafora binarnego, który jest bardzo podobny do muteksu.
  6. Zmienna semafora jest modyfikowana przez funkcję wait () i signal () oprócz inicjalizacji. Jednak obiekt wyciszenia jest blokowany lub odblokowywany przez proces pozyskiwania lub zwalniania zasobu.
  7. Jeśli wszystkie zasoby są pozyskiwane przez proces i żaden zasób nie jest wolny, wówczas proces żądający pozyskania zasobu wykonuje operację wait () na zmiennej semafora i blokuje się, aż liczba semaforów stanie się większa niż 0. Ale jeśli obiekt mutex jest już zablokowany następnie proces pragnący uzyskać oczekiwanie zasobów i system czeka w kolejce do momentu zwolnienia zasobu i odblokowania obiektu mutex.

Wniosek:

Semafor jest lepszym rozwiązaniem w przypadku, gdy dostępnych jest wiele instancji zasobów. W przypadku pojedynczego zasobu udostępnionego mutex jest lepszym wyborem.

Top