You are on page 1of 2

#include <pthread.

h>
#include <stdlib.h>
#include <stdio.h>
#define n 5
int continua = 1;
int *bete;
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
void * gandeste(void *p) {
int *i = (int *) p;
while (continua) {
pthread_mutex_lock(&m);
if (bete[*i] == 1 && bete[(*i + 1) % n] == 1) {
bete[*i] = 0;
bete[(*i + 1) % n] = 0;
printf("Filosoful cu id-ul %d mananca\n", *i);
pthread_mutex_unlock(&m);
sleep(random() % 10 + 1);
pthread_mutex_lock(&m);
bete[*i] = 1;
bete[(*i + 1) % n] = 1;
printf("Filosoful cu id-ul %d s-a saturat\n", *i);
}
pthread_mutex_unlock(&m);
sleep(1);
}
}
void * afisare(void *p) {
int i;
while (continua) {
pthread_mutex_lock(&m);
for (i = 0; i < n; i++)
if (bete[i] == 0) {
printf("0");
}
else {
printf("|");
}
printf("\n");
pthread_mutex_unlock(&m);
sleep(1);
}
}
int main() {
pthread_t *t;
int i;
int *x;
pthread_t w;
srand(getpid());
t = (pthread_t *) malloc(n * sizeof(pthread_t));
x = malloc(n * sizeof(int));
bete = malloc(n * sizeof(int));
for (i = 0; i < n; i++)
bete[i] = 1;

pthread_create(&w, NULL, afisare, NULL);


for (i = 0; i < n; i++) {
x[i] = i;
pthread_create(&t[i], NULL, gandeste, &x[i]);
}
sleep(100);
continua = 0;
for (i = 0; i < n; i++)
pthread_join(t[i], NULL);
pthread_join(w, NULL);
free(t);
free(x);
free(bete);
}

You might also like