PETERSON'S SOLUTİON

Sıralı çalışma gerektirmeyen mutual exclusion probleme bir çözüm 1965'te Dijkstra tarafından üretilmiştir.Bu probleme orjinal bir çözüm Hollanda'lı bir matamatikçi olan Dekker'dan gelmişti.Fakat Peterson'nın bulduğu çözüm daha anlaşılırdı.

Bu çözüm iki süreçten oluşmaktadır.C dilinde gösterimi aşağıdaki gibidir.

int no_of_processes; //süreç numarası

int turn;

int interested[no_of_processes]; //ilk değerler false

void enter_region(int process);{

int other;//diğer sürecin numarası

other=1-process;//zıt süreçler

interested[process]=TRUE;

turn=process;

while(turn==process&&interested[other]==TRUE);//bekliyor

}

void leave_region(int process){

interested[process]=FALSE;// süreç kritik bölgeyi terkediyor

}

Kritik kısmına(critical region) girmek üzere olan süreç giriş kısmını(enter_region) çağırmak zorundadır.Kritik kısmın sonunda bitiş kısmı(leave_region) çağrılır.

Başlangıçta her iki süreçte kritik kısımda değiller ve interested dizisi süreçlerin elemanlarını false yapar.

Süreç 0 ın enter_region ı çağırdığını varsayalım.other değişkeni (1- process) olarak belirlenmiştir.while'a gelmeden önce turn değişkeni de belirlenmektedir.Bu durumda süreç 1 çalışmıyor iken diğer süreç kendi kritik kısmına(critical region)girebilir.

Şimdi süreç 1 enter region u çağırabilir.Süreç 0 işlemdeyken beklemek zorundadır.Süreç 1 in sadece interested[0] olduğunda devam etmesine izin verilecektir

Eğer her iki süreçte enter region u aynı anda çağırırsa,süreçlerden biri turn değişkenini belirler fakat bu durum anlaşılır olmaz.

Süreç 0'ın turn değişkenini 0 yaptığnı ve ardındanda süreç 1 'in turn değişkenini 1 yaptıgını varsayalım.Bu durumda süreç 0 kritik kısma girebilir fakat süreç 1 beklemek zorundadır.