Я намагаюся зрозуміти алгоритми Петерсона і Деккера, які дуже схожі і демонструють багато симетрій.
Я спробував сформулювати алгоритми на неофіційній мові так:
Peterson's: "I want to enter." flag[0]=true;
"You can enter next." turn=1;
"If you want to enter and while(flag[1]==true&&turn==1){
it's your turn I'll wait." }
Else: Enter CS! // CS
"I don't want to enter any more." flag[0]=false;
Dekker's: "I want to enter." flag[0]=true;
"If you want to enter while(flag[1]==true){
and if it's your turn if(turn!=0){
I don't want to enter any more." flag[0]=false;
"If it's your turn while(turn!=0){
I'll wait." }
"I want to enter." flag[0]=true;
}
}
Enter CS! // CS
"You can enter next." turn=1;
"I don't want to enter any more." flag[0]=false;
Різниця, здається, полягає в тому, де "You can enter next."
відбувається і факт, що "if it's your turn I don't want to enter any more."
відбувається в Dekker's.
У алгоритмі Петерсона два процеси здаються домінуючими. Здається, що процес змушує проникнути в критичну секцію, якщо не черга іншого.
І навпаки, в алгоритмі Деккера два процеси здаються підданими та ввічливими. Якщо обидва процеси хочуть увійти в критичний розділ, а інша черга, процес вирішує більше не бажати входити. (Це потрібно для свободи голоду? Навіщо?)
Чим різняться ці алгоритми? Я думаю, що коли обидва процеси намагаються увійти в критичний розділ, у Петерсона процес говорить «я входжу», тоді як у Dekker - «Ви можете увійти». Чи може хтось з'ясувати спосіб поведінки процесів у кожному алгоритмі? Чи правильний мій спосіб викладати це в неофіційних термінах?