Problem ucztujących filozofów - priorytety

0

Jak w temacie, mam problem ucztujących filozofów do zaimplementowania, lecz tu nie jest on najważniejszy. Pytanie jest zatem inne.
Jak w danym problemie i rozwiązaniu np. dijekstra (semafory są brane w odpowiedniej kolejności) zrobić priorytety, tak by np. jeden filozof mniejszy jak widzi filozofa o wyższej randze, ustąpił mu zasobu.

Rozwiązałem ten problem implementując sobie semafor priorytetowy, ale czy istnieje inne, może lepsze rozwiązanie, na zwykłych semaforach np. Sys V, Posix, javy czy tam C#.

0

W najprostszym przypadku priorytety filozofów mają wpływ na to, kto pierwszy jest w kolejce oczekiwania na zasób. Jeśli chcesz by filozof oddawał zasób by gdy stwierdzi, że czeka ktoś ważniejszy, to najprościej zrobić to, przez zwracanie zasobu i natychmiastowe jego pobieranie (jeśli będzie ktoś ważniejszy to filozof zostanie ustawiony w kolejce za nim, jeśli jest najważniejszy to wyprzedzi wszystkich w kolejce).

0
MarekR22 napisał(a):

W najprostszym przypadku priorytety filozofów mają wpływ na to, kto pierwszy jest w kolejce oczekiwania na zasób. Jeśli chcesz by filozof oddawał zasób by gdy stwierdzi, że czeka ktoś ważniejszy, to najprościej zrobić to, przez zwracanie zasobu i natychmiastowe jego pobieranie (jeśli będzie ktoś ważniejszy to filozof zostanie ustawiony w kolejce za nim, jeśli jest najważniejszy to wyprzedzi wszystkich w kolejce).

To rozwiązanie może zadziała, ale czy nie grozi busy waitingiem. Co jak np. król będzie miał niepohamowany apetyt na zasoby? Zagłodzi niższych filozofów. Czy istnieje jakieś w miarę proste rozwiązanie spełniające warunki no-starvation i fairness?

0

Może zrób tak jak napisał Marek, ale określ maksymalny czas, jaki może siedzieć przy stole filozof. Np. przychodzi "król" - ok, wszyscy inni są za nim, ale jeśli skończy mu się czas, ten, który jest za nim bezpośrednio, podchodzi do stołu. Jeśli w tym czasie król się nie naje, to jeśli ten, kto był za nim skończy jeść, ponownie na ten czas przychodzi król ... Tak mi przyszło do głowy, za mocno nie roztrząsałem wszystkich możliwości, ale może to jest to, a jeśli nie, może Ci się jakoś przyda do wymyślenia czegoś innego ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1