КДП/Размена порука

Извор: SI Wiki
< КДП
Датум измене: 11. фебруар 2023. у 19:14; аутор: Fedja (разговор | доприноси) (razmena poruka kategorija)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

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





Јун 2022, 5. задатак

Debug: КДП/Јун 2022 5. задатак

Поставка

Користећи синхрону размену порука написати дистрибуирано решење за проблем филозофа који ручавају (The Dining Philosophers Problem). Код дистрибуираног решења процеси филозофи комуницирају само са процесима виљушкама и процеси виљушке комуницирају само са процесима филозофима.

Решење

void philosopher(int ID, chan<string> release, chan<char> forkL, chan<char> forkR) {
    while (true) {
        // Филозофирамо
        if (ID % 2 == 0) {
            forkL.send('R');
            forkR.send('L');
        } else {
            forkR.send('L');
            forkL.send('R');
        }
        // Једемо
        release.receive();
        release.receive();
    }
}

void fork(chan<char> acquire, chan<string> philL, chan<string> philR) {
    while (true) {
        char dir = acquire.receive();
        if (dir == 'L') {
            philL.send("release");
        } else {
            philR.send("release");
        }
    }
}