1

Я смотрю алгоритм Петерсона (взаимное исключение для 2-х процессов). Мой вопрос в том, что, если ни один процесс не вступил в критический раздел, и P0 хочет впервые войти в критический раздел, тогда P1 Флаг будет ложным, так как P0 входит в критический раздел? Условие того, что P0 входит в его критический раздел, зависит от того, что наш флаг для P1 является истинным.Взаимное исключение (алгоритм Петерсона)

Код:

//flag[] is boolean array; and turn is an integer 
flag[0] = false; 
flag[1] = false; 
turn; 

P0: flag[0] = true; 
    turn = 1; 
    while (flag[1] == true && turn == 1) 
    { 
     // busy wait 
    } 
    // critical section 
    ... 
    // end of critical section 
    flag[0] = false; 

P1: flag[1] = true; 
    turn = 0; 
    while (flag[0] == true && turn == 0) 
    { 
     // busy wait 
    } 
    // critical section 
    ... 
    // end of critical section 
    flag[1] = false; 

ответ

3

Условие P0, чтобы ввести это критический участок, зависит от нашего флага для P1, чтобы быть правдой.

Нет, это не так. Заявление ...

while (flag[1] == true && turn == 1) { ... } 

занят ожидающий для флага для Р1 остановки быть верным. То есть: P0 ожидает, что P1 покинет свой критический раздел. Поскольку P1 еще не вступил в критический раздел, P0 не занят - подождите и правильно входит в критический раздел.

+0

О, я получил его, не видел ожидающую часть, я думал, что он сказал, пока() {Критическая секция} Благодарим вас за очищение от этого, немой меня. – user2122810

Смежные вопросы