Algorytm Dekkera
Z Wikipedii
Pierwszy algorytm poprawnie rozwiązujący problem wzajemnego wykluczania się równolegle działających procesów. Tylko jeden z nich może w danej chwili wykonywać swoją sekcję krytyczną (zob. programowanie współbieżne).
[edytuj] Kod dla dwóch procesów działających równolegle:
W kodzie korzysta się ze wspólnych dla procesów zmiennych: flag1, flag2 i turn, które oznaczają odpowiednio, że pierwszy proces korzysta z zasobów, drugi proces korzysta z zasobów, zmienna decyduje, który proces wchodzi do sekcji krytycznej w wypadku, gdy oba deklarują chęć korzystania. Na początku zmienne ustawione są następująco:
flag1 := false; flag2 := false; turn := 1; (lub 2, bez większego znaczenia)
Ponieważ kod wejścia i wyjścia z sekcji krytycznej dla procesu drugiego różni się odpowiednio numerami flag, poniżej podany jest jedynie kod dla procesu 1.
flag1 := true; while(flag2 == true) { if(turn != 1) { flag1 := false; while(turn != 1) { nie rób nic } flag1 := true; } } sekcja krytyczna turn := 2; flag1 := false;
Zobacz też: sekcja krytyczna, algorytmy mutex