PDA

Visualizza versione completa : Soluzione Problema dei 5 filofofi


scotch
11-02-2004, 13.52.19
Qualcuno di voi sa postarmi la soluzione in c++ del problema dei 5 filosofi con l'utilizzo dei semafori?! lo sto cercando sulla rete ma se qualcuno di voi ha già la soluzione... Grazie in anticipo!

Sabba
11-02-2004, 14.38.35
?????!!!!!!!!!!! scusa, ma cos'è sta storia dei filosofi e dei semafori...in due parole....;)

Dav82
11-02-2004, 14.43.14
Originariamente inviato da Sabba
?????!!!!!!!!!!! scusa, ma cos'è sta storia dei filosofi e dei semafori...in due parole....;)

Qui (http://www.google.it/search?q=problema+cinque+filosofi&ie=UTF-8&oe=UTF-8&hl=it&lr=) è spiegato, e direi (anche se non ho guardato) che c'è anche un po' di codice java che implementa una soluzione. Poi passare da java a c++ non penso sia impossibile ;)

scotch
12-02-2004, 10.08.48
Il problema dei filosofi è:
Ci sono cinque filosofi seduti stabilmente ad un tavolo rotondo e ciascuno ha davanti un piatto di riso (che supponiamo inesauribile), oppure esiste un unico grande piatto al centro della tavola da cui ogni filosofo mangia (questo non cambia il problema). Tra un piatto ed un altro (o tra un filosofo ed un altro) però non vi sono due bastoncini come sarebbe opportuno, ma solo uno, per un totale di sole 5 bacchette, contro le 10 che sarebbero richieste per permettere a tutti di mangiare contemporaneamente. Ciascun filosofo per tutta la sua vita non fa altro che tre cose: pensare quando e' sazio, mangiare e mettersi in attesa di mangiare quando ha fame. Un filosofo decide di mettersi a pensare a qualche problema filosofico per un certo intervallo di tempo (che possiamo ritenere casuale e finito), poi si siede a tavola (supponiamo ciascuno abbia assegnato un posto fisso, ma questo non è necessario) e decide di mangiare il riso. Impiega un certo tempo a mangiare (anche questo lo faremo variare casualmente, ma sarà sempre finito), poi decide di mettersi di nuovo a pensare, poi mangia di nuovo, ecc. Quando decide di mangiare, prima di poterlo fare, ha bisogno di prendere in mano due bacchette. Un filosofo può prendere solo le due bacchette che stanno alla sua destra e alla sua sinistra, una per volta, e solo se sono libere, ovvero non può sottrarre la risorsa bacchetta ad un altro filosofo che l'ha già acquisita, cioè che sta mangiando (no preemption). Finché non riesce a prendere le bacchette, il filosofo deve aspettare affamato. Quando invece, appena dopo aver mangiato, è sazio, posa le bacchette al loro posto e si mette a pensare per un certo tempo.

La situazione è tale che due filosofi vicini non possono mai mangiare contemporaneamente. Si chiede di trovare una soluzione, ossia una strategia tramite la quale i filosofi sono costretti ad acquisire le risorse (le bacchette) che soddisfi i seguenti due obiettivi:

1. non può accadere che tutti i filosofi rimangono indefinitamente bloccati in attesa reciproca che l'altro rilasci l'ulteriore bacchetta di cui hanno bisogno per mangiare (no deadlock)
2. non accade mai che uno o più filosofi non riescano mai a mangiare e quindi muoiano di fame perché gli altri sono più svelti di loro a prendere le bacchette (no starvation)

LoryOne
12-02-2004, 16.57.24
La soluzione "mangia con le mani" non è contemplata ?

Sergio Neddi
12-02-2004, 21.16.53
Io al posto loro andrei al ristorante, anche perché con le bacchette al massimo mi pulisco le orecchie.