КДП/Размена порука
< КДП
Пређи на навигацију
Пређи на претрагу
Размена порука путем канала је концепт дистрибуираног програмирања из трећег блока наставе и долази на дистрибуираном делу испита СИ и РТИ.
Јун 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");
}
}
}