Задача взаимного исключения
Рассмотрите следующее решение задачи взаимного исключения, затрагивающей два процесса, P0 и P1. Предположим, что переменная turn имеет исходное значение 0. Код процесса P0 на картинке:
По логике, нужно выйти из блока while (turn != 0), но как это сделать не понимаю.
Ответы (1 шт):
Похоже тут рассматривается некая упрощенная специфическая разновидность алгоритма Петерсона для реализации критической секции.
Похоже, что есть два процесса P0 и P1.
P0:
while (turn != 0) { }
// критическая секция
turn = 0;
P1:
while (turn != 1) { }
// критическая секция
turn = 1;
Переменная turn используется для передачи сигнала о том, что процесс вышел из критической секции. А значит второй процесс может продолжать выполнение и следовательно зайти в критическую секцию. Каждый процесс ждет, пока не наступит его очередь. А его очередь наступает, когда другой процесс разрешит. Т.е. P0 сможет выйти из цикла, когда процесс P1 закончит выполнение критической секции и установит turn=1.
