Выполнение условий взаимоисключения легко доказать. Рассмотрим процесс Р0. После того как flag[0] установленный в true, Р1 войти в критический раздел не может. Если же Р1 уже находится в критическом разделе, то flag[1] = true и для Р0 вход в критический раздел заблокирован. В данном случае взаимное блокирование предотвращено. Предположим, что Р0 заблокирован в своем цикле whіle. Это означает, что flag[1] = true, а turn = 1. Р0 может войти в критический раздел, когда либо flag[1] становится равным false, либо turn становится равным 0. Рассмотрим три исчерпывающих случая.
1. Р1 не намерен входить в критический раздел. Такой случай невозможен, поскольку при этом выполнялось бы условие flag[1] = false.
2. Р1 ожидает вход в критический раздел. Такой случай также невозможным, поскольку, если turn = 1, то Р1 способен войти в критический раздел.
3. Р1 циклически использует критический раздел, монополизируя доступ к нему. Этого не может произойти, поскольку Р1 вынужден перед каждой попыткой вхождения в критический раздел дать такую возможность процессу Р0, устанавливая значение turn равным 0.
Следовательно, у нас есть простое решение проблемы взаимных исключений для двух процессов. Алгоритм Петерсона легко обобщается на случай n процессов.