welcome: please sign in

Cerca

Link Dipartimentali

Link Esterni

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.