Я искал информацию об алгоритме Петерсона, но наткнулся на ссылки, в которых говорится, что он не удовлетворяет голодание, а только тупик. Это правда? и если да, то может ли кто-нибудь объяснить, почему это не так?
Алгоритм Петерсона:
flag[0] = 0;
flag[1] = 0;
turn;
P0: flag[0] = 1;
turn = 1;
while (flag[1] == 1 && turn == 1)
{
// busy wait
}
// critical section
...
// end of critical section
flag[0] = 0;
P1: flag[1] = 1;
turn = 0;
while (flag[0] == 1 && turn == 0)
{
// busy wait
}
// critical section
...
// end of critical section
flag[1] = 0;
Алгоритм использует две переменные, флаг и поворот. Значение флага, равное 1, указывает, что процесс хочет войти в критическую секцию. Переменная turn содержит идентификатор процесса, чья очередь. Вход в критическую секцию предоставляется процессу P0, если P1 не хочет входить в свою критическую секцию или если P1 отдал приоритет P0, установив для поворота значение 0.