KDP/Razmena poruka

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Razmena poruka putem kanala je koncept distribuiranog programiranja iz trećeg bloka nastave i dolazi na distribuiranom delu ispita SI i RTI.





Jun 2022, 5. zadatak

Debug: KDP/Jun 2022 5. zadatak

Postavka

Koristeći sinhronu razmenu poruka napisati distribuirano rešenje za problem filozofa koji ručavaju (The Dining Philosophers Problem). Kod distribuiranog rešenja procesi filozofi komuniciraju samo sa procesima viljuškama i procesi viljuške komuniciraju samo sa procesima filozofima.

Rešenje

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