Zakleszczenie
Zakleszczenie to sytuacja, w której program nie może uzyskać dostępu do zasobu potrzebnego do dalszego działania. Gdy aktywna aplikacja napotka zakleszczenie, może się „zawiesić” lub przestać odpowiadać.
Zasoby, takie jak zapisane lub zapisane w pamięci podręcznej dane, mogą zostać zablokowane podczas uzyskiwania do nich dostępu przez określony proces w programie. Zablokowanie danych uniemożliwia innym procesom ich przedwczesne nadpisanie. Jeśli proces lub zapytanie musi uzyskać dostęp do zablokowanych danych, ale proces, który je zablokował, nie zwolni blokady, może wystąpić zakleszczenie.
Na przykład poniższa sytuacja spowoduje zakleszczenie między dwoma procesami:
- Proces 1 żąda zasobu B od procesu 2.
- Zasób B jest zablokowany, gdy działa proces 2.
- Proces 2 potrzebuje zasobu A od procesu 1, aby zakończyć działanie.
- Zasób A jest zablokowany, gdy działa proces 1.
W rezultacie proces 1 i proces 2 czekają na zakończenie działania drugiego procesu. Ponieważ żaden z procesów nie może kontynuować działania, dopóki drugi się nie zakończy, powstaje zakleszczenie.
Unikanie zakleszczeń
Programiści mogą zapobiegać zakleszczeniom, unikając sytuacji blokowania w logice swoich programów. Na przykład zamiast uzależniać od siebie dwa procesy, kod źródłowy można napisać tak, aby każdy wątek kończył działanie, zanim inny wątek będzie potrzebować jego zasobów. Zapewniając dostępność danych wtedy, gdy są potrzebne, programiści mogą chronić swoje aplikacje przed zawieszaniem się lub awariami.
NOTE: Zakleszczenia mogą również wystąpić, gdy na bazie danych wykonywane są co najmniej dwa zapytania. Bazy danych obsługujące transakcje blokują aktywne rekordy, uniemożliwiając innym zapytaniom dostęp do nich. Jeśli proces nie może uzyskać dostępu do zablokowanego rekordu, może wystąpić zakleszczenie bazy danych.
Sprawdź swoją wiedzę