Скачиваний:
11
Добавлен:
01.05.2014
Размер:
1.52 Кб
Скачать
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <iostream.h>
#include<time.h>


 static pthread_cond_t cond=PTHREAD_COND_INITIALIZER;//Uslovnaia peremennaia 
 
static pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;//Mutex
 

#define f 15 //Vremia na obed
#define f1 (rand() % 3 + 1) //Vremia na edu
#define f2 (rand() % 5 + 1)  //Vremia na besedu
 
 static int forks = 3; //Vilki

  static void *Filosof(void *no) 
   { 
     int t=f;
    unsigned int t1;
      while (t > 0) { /* OBED */
         cout<<endl<<" Filosof "<<(int)no<<" beseduet!";
        t1 = (rand() % 5 + 1); 
        sleep (t1); 
        t -= t1;
        // Filosof pitaetsia vziat vilki

        pthread_mutex_lock (&mutex);

        while (forks == 0 )
        { cout<<endl<<"Filosof "<<(int)no<<" jdet!";
          pthread_cond_wait(&cond, &mutex);
        }
        cout<<"Filosof "<<(int)no<<" vzial vilki!";
        forks -= 1;
        pthread_mutex_unlock (&mutex);

        cout<<endl<<"Filosof "<<(int)no<<" est!";
        
        t1 = (rand() % 3 + 1);
        sleep (t1);
        t -= t1;

        pthread_mutex_lock (&mutex);
        
        forks +=1;
        pthread_cond_broadcast(&cond);
        pthread_mutex_unlock(&mutex);
    } /* while */
        cout<<endl<<" Filosof "<<(int)no<<" Vishel iz za     stola";    
    }
   

  int main()
   {  pthread_t tid;
      int i;
      int n=5;
    for(i=1; i<=n; i++)
     { 
     pthread_create(&tid, NULL, Filosof, (void*)i);
    } 
    }