Professional Documents
Culture Documents
Problema Filozofi
Problema Filozofi
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;