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

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

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





Јун 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");
        }
    }
}