• c++ kodunda şu şekilde yazılabilen algoritmadır:

    #define proc_1 0
    #define proc_2 1
    int turn=proc_1;
    bool flag[2]={false,false};

    while (true) // birinci process için
    {
    flag[proc_1]=true;
    turn=proc_2;
    while (flag[proc_2] && turn==proc_2);
    // critical section
    flag[proc_1] = false;
    // remainder section
    }

    while (true) // ikinci process için
    {
    flag[proc_2]=true;
    turn=proc_1;
    while (flag[proc_1] && turn== proc_1);
    // critical section
    flag[proc_2] = false;
    // remainder section
    }

    bu algoritmanın amacı:
    critical sectionu aynı anda processlerden sadece birinin execute ediyor olması, processlerin ikisinin de critical sectiona girebiliyor olması (bir processing critical sectionu tek başına işgal etmemesi). ve critical section boştaysa processlerin bu sectiona girmek için beklememesidir.

    ayrıca bu iki algoritmadaki ilk iki satırın yerlerini birbirleri ile değiştirirseniz algoritma düzgün çalışmaz. bunun sebebi siz flag’i eğer ilk olarak setlemezseniz proseslerden ilki executionu flagini setlemeden diğer processe devredebilir. ikinci process ise sıra kendine geldiğinde flagini setleyip turn değişkenini diğer prosese verip kritik bölüme girebilir. eğer ikinci process tam bu sırada kontrolü birinci prosese verir ise bu proses kendi flagini setleyip tur değişkeni kendinde olduğu için kritik bölüme girebilir. bu durumda iki proses de aynı anda kritik bölümde olacağı için bu algoritmanın hedefine ulaşamamış oluruz.
hesabın var mı? giriş yap