КДП/Рандеву

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Рандеву је концепт из дистрибуираног програмирања из трећег блока наставе и долази на дистрибуираном делу испита за СИ и РТИ.





Август 2021, 3. задатак

Debug: КДП/Август 2021 3. задатак

Поставка

Решити проблем филозофа који ручавају (Dining Philosophers Problem) користећи концепт рандевуа (Rendezvous).

Решење

Module Server
    op dohvatiViljuske(idF);
    op vratiViljuske(idF);
Body
Process Server{
    const int N = 5;
    boolean jedu[N] = {false};
    while(true){
        //pretpostavka da kompajler vraca negativne vrednosti za moduo
        in dohvatiViljusku(i) and !jedu[(i-1)%N<0 ? ((i-1)%N+N) : (i-1)%N] and !jedu[(i+1)%N] -> jedu[i] = true;
        [] vratiViljuske(i) -> jedu[i] = false;
        ni
    }
}
End Server;

procces Filozof[i=0..4]{
    while(true){
        misli;
        call Server.dohvatiViljuske(i);
        jedi;
        call Server.vratiViljuske(i);
    }
}