KDP/Razmena poruka
< КДП
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
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");
}
}
}