Algorytm Dekkera

Algorytm_Dekkera
Algorytm Dekkera to 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). Rozwiązanie to zostało przypisane holenderskiemu matematykowi Th. J. Dekkerowi przez Edsgera Dijkstra w jego manuskrypcie na temat współdziałania procesów sekwencyjnych . Pozwala on dwóm wątkom na bezkonfliktową pracę na danych pochodzących z jednego źródła, używając dzielonej pamięci do komunikacji między sobą.W pascalowej implementacji algorytmu korzysta się ze wspólnych dla procesów zmiennych: flag1, flag2 i turn, które oznaczają odpowiednio, że pierwszy proces chce korzystać z zasobów, drugi proces chce korzystać z zasobów, zmienna turn decyduje, który proces wchodzi do sekcji krytycznej w wypadku, gdy oba deklarują chęć korzystania. Na początku zmienne ustawione są następująco: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