Çok benzer simetri gösteren ve Peterson ve Dekker'in algoritmalarını anlamaya çalışıyorum.
Algoritmaları gayrı resmi bir dilde aşağıdaki gibi formüle etmeye çalıştım:
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;
Fark, "You can enter next."
meydana geldiği nokta ve "if it's your turn I don't want to enter any more."
Dekker'da meydana gelen gerçektir .
Peterson algoritmasında, iki işlem baskın görünüyor. Bir süreç, diğerinin sırası gelmediği sürece kritik bölüme girmeye zorlar gibi görünüyor.
Tersine, Dekker'ın algoritmasında, iki işlem itaatkâr ve kibar görünüyor. Her iki işlem de kritik bölüme girmek isterse ve diğeri sırası ise, işlem artık girmek istemediğine karar verir. (Bu açlık-özgürlük için gerekli midir? Neden?)
Bu algoritmalar tam olarak nasıl farklılık gösterir? Her iki işlem de kritik bölüme girmeye çalıştığında, Peterson'da, işlemin "giriyorum", Dekker'de işlem "Girebilirsiniz" yazdığını hayal ediyorum. Birisi işlemlerin her algoritmada nasıl davrandığını temizleyebilir mi? Gayri resmi olarak koyma yolum doğru mu?