20.11. Unikanie zakleszczeń

Problem

Wątki rywalizują o wyłączny dostęp do tych samych zasobów. Bez ich synchronizacji może dojść do zakleszczenia. Wątek A będzie zablokowany, oczekując na zasób będacy w posiadaniu wątku B, a wątek B będzie zablokowany, oczekując na zasób będący w posiadaniu wątku A. Żaden z wątków nie wznowi działania.

Rozwiązanie

Nie istnieje proste rozwiązanie tego problemu. Trzeba opracować reguły ustanawiania blokad przez wątki i zapewnienia ich przestrzegania.

Ogólnie rzecz biorąc, trzeba zagwarantować ustanawianie blokad przez wątki w tej samej kolejności. Należy ustanowić kolejkowanie (formalnie bądź nieformalnie) blokad w programie i zapewnić, aby wątki ustanawiały blokady w rosnącym porządku.

Standardową ilustracją ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.