Deadlock — łamigłówka o kolejności blokad

Zmień kolejność pobierania blokad, aby żaden wątek nie czekał w nieskończoność. Łamigłówka o regule globalnej kolejności blokad.

Poziom 1/5Przeciągaj blokady lub użyj ← →

Zmień kolejność w wątkach, aby żadne dwa nie czekały na siebie w nieskończoność.

T1pobiera
  1. 🔒 A
  2. 🔒 B
T2pobiera
  1. 🔒 B
  2. 🔒 A
Jak grać
  • Każdy wiersz to wątek, a żetony to blokady, które pobiera od lewej do prawej.
  • Przeciągnij żeton (lub użyj strzałek), aby zmienić kolejność pobierania blokad.
  • Jeśli dwa wątki wezmą tę samą parę w odwrotnej kolejności, mogą zamrozić się na zawsze. Rozwiązaniem jest jedna globalna kolejność dla wszystkich — naciśnij Uruchom, aby sprawdzić.

Jak to działa

Każdy wiersz to wątek, a każdy żeton to blokada, którą pobiera od lewej do prawej. Gdy dwa wątki biorą tę samą parę w odwrotnej kolejności, istnieje przeplot, w którym każdy trzyma jedną i czeka na drugą — i żaden już nie ruszy. Naciśnij Uruchom: graf oczekiwania jest sprawdzany pod kątem cyklu, a winne blokady świecą na czerwono. Rozwiązaniem jest reguła prawdziwych baz kodu: wybrać jedną globalną kolejność blokad i trzymać się jej wszędzie.

Łamigłówka edukacyjna. Modeluje cykle hold-and-wait, czyli warunek zakleszczenia, który da się wyeliminować projektowo; prawdziwe systemy mają też limity czasu, struktury bez blokad i muszą myśleć o livelocku.

Najczęstsze pytania

Co naprawdę powoduje tu zakleszczenie?

Cykl w grafie oczekiwania. Jeśli wątek 1 trzyma A i chce B, a wątek 2 trzyma B i chce A, oba czekają w nieskończoność. Gra rysuje dokładnie ten cykl.

Dlaczego posortowanie blokad pomaga?

Jeśli wszystkie wątki pobierają blokady w tej samej globalnej kolejności, cykl jest niemożliwy: wątek może czekać tylko na blokadę późniejszą niż te, które trzyma, więc graf pozostaje acykliczny.

Czy tak wykrywa się prawdziwe zakleszczenia?

Sprawdzanie cyklu to ta sama idea, co w detektorach inwersji kolejności blokad, np. ThreadSanitizer. Prawdziwe narzędzia obserwują kolejność w czasie działania; tu widzisz cały graf naraz.

Powiązane narzędzia

Osadź tę grę

Dodaj tę darmową grę do swojej strony: