Allegato "filosofiCortesi.cpp"
Scarica 1 #include <JTC/jtc.h>
2 #include <iostream.h>
3
4 #define MAX 5
5
6 // soluzione senza deadlock ma con starvation
7 class Tavola : public JTCMonitor
8 {
9 bool bacchette[MAX];
10 int numRisvegliAVuoto[MAX];
11
12 public:
13 Tavola()
14 {
15 for (int i = 0; i < MAX; i++){
16 bacchette[i] = false;
17 numRisvegliAvuoto[i] = 0;
18 }
19 }
20 void mangia( int nfilosofo )
21 {
22 JTCSynchronized sync(*this);
23 while( bacchette[nfilosofo] ||
24 bacchette[(nfilosofo+1) % MAX] ||
25 numRisvegliAVuoto[(nfilosofo - 1) % MAX] > SOGLIA ||
26 numRisvegliAVuoto[(nfilosofo + 1) % MAX] > SOGLIA)
27 {
28 numRisvegliAVuoto[nfilosofo]++;
29 wait();
30 }
31 numRisvegliAVuoto[nfilosofo] = 0;
32 bacchette[nfilosofo] = bacchette[(nfilosofo+1) % MAX] = true;
33 }
34 void smetti( int nfilosofo )
35 {
36 JTCSynchronized sync(*this);
37 bacchette[nfilosofo] = bacchette[(nfilosofo+1) % MAX] = false;
38 notifyAll();
39 }
40 };
41
42 class Filosofo : public JTCThread
43 {
44 virtual void run()
45 {
46 // riempire a piacimento
47 }
48 };
49
50 void main()
51 {
52 // riempire a piacimento
53 }
Allegati
Non รจ consentito inserire allegati su questa pagina.