Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №34 / lab3
.cpp#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);
}
}