welcome: please sign in

Cerca

Link Dipartimentali

Link Esterni

Allegato "filosofiIngenui.cpp"

Scarica

   1 #include <JTC\JTC.h>
   2 #include <iostream.h>
   3 #include <time.h>
   4 
   5 
   6 class Bacchetta : public JTCMonitor
   7 {
   8 	bool occupata;
   9 public:
  10 	Bacchetta()
  11 	{
  12 		occupata = false;
  13 	}
  14 	void prendiBacchetta()
  15 	{
  16 		JTCSynchronized sync(*this);
  17 		while( occupata )
  18 			this->wait();
  19 		bacchette[2]->prendiBacchetta();
  20 		occupata = true;
  21 	}
  22 	void lasciaBacchetta()
  23 	{
  24 		JTCSynchronized sync(*this);
  25 		occupata = false;
  26 		   this->notify();
  27 	}
  28 };
  29 
  30 Bacchetta* bacchette[5];
  31 
  32 class Filosofo : public JTCThread
  33 {
  34 	int numFilosofo;
  35 public:
  36 	Filosofo(int i)
  37 	{
  38 		numFilosofo = i;
  39 	}
  40 	virtual void run()
  41 	{
  42         srand(numFilosofo * time(0) );
  43 		while(true)
  44 		{
  45 			cout << "Il filosofo " << numFilosofo << " dorme." << endl;
  46 			sleep(rand() % 1000);
  47 			cout << "Il filosofo " << numFilosofo << " si sveglia." << endl;
  48 			bacchette[numFilosofo]->prendiBacchetta();
  49 			sleep(rand() % 500);
  50 			bacchette[(numFilosofo + 1) % 5]->prendiBacchetta( );
  51 			cout << "Il filosofo " << numFilosofo << " mangia." << endl;
  52 			sleep(rand() % 500 );
  53 			cout << "Il filosofo " << numFilosofo << " ha finito di mangiare." << endl;
  54 			bacchette[numFilosofo]->lasciaBacchetta();
  55 			bacchette[(numFilosofo + 1) % 5]->lasciaBacchetta();
  56 		}
  57 		}
  58 };
  59 
  60 int main()
  61 {
  62    JTCInitialize init;
  63    Filosofo* filosofi[5];
  64    for (int i = 0; i < 5; i++)
  65    {
  66 	   bacchette[i] = new Bacchetta();
  67    }
  68    for (int i = 0; i < 5; i++)
  69    {
  70 	   filosofi[i] = new Filosofo(i);
  71 	   filosofi[i]->start();
  72    }
  73    return 0;
  74 }

Allegati

Non รจ consentito inserire allegati su questa pagina.