ciao ragazzi avrei un problema.non riesco a comprendere una parte di codice.chi me la spiega???
codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <limits.h>
#include <pthread.h>
#include <semaphore.h>
#define NR 4
#define NW 3
pthread_mutex_t mutex, mutex_data;
typedef struct{char *scrittore; int numero; int info;
}dataobject;
dataobject data = {"***", -1};
int n, reader_count=0;
void * writer(void *x){
int n, i=0;
int k, number=*((int*)x);
printf("scrittore %d creato \n\n",number);
for (;;) {
srand((unsigned int) time(NULL));
n = rand() % 10+ 1; i++;
printf("scrittore: %d \n", number);
printf("genera il dato %d\n", i);
pthread_mutex_lock(&mutex_data);
data.scrittore = "writer";
data.numero = number; data.info=i;
printf("scrittore: %d\n",number);
printf("scrive il dato\n");
printf("%s %d numero %d\n", data.scrittore,
data.numero, data.info);
pthread_mutex_unlock(&mutex_data);
sleep(n);
}
}
void * reader(void *x){
int k, number=*((int*)x);
dataobject local_data_image;
printf("lettore %d creato\n\n", number);
for (;;) {
srand((unsigned int) time(NULL));
n = rand() % 4 + 1;
pthread_mutex_lock(&mutex); // NON CAPISCO QUESTO PEZZO DA QUI FINO A
if(++reader_count==1)
pthread_mutex_lock(&mutex_data);
pthread_mutex_unlock(&mutex); // QUI
local_data_image=data;
printf(“lettore %d : \n", number);
printf("leggo %d scritto da %s %d\n", data.info,
data.scrittore, data.numero);
pthread_mutex_lock(&mutex);
if(--reader_count==0)
pthread_mutex_unlock(&mutex_data);
//se non ci sono altri lettori gli scrittori possono
accedere il dato
pthread_mutex_unlock(&mutex);
// noncritical region
usleep(n);
printf("lettore %d : \n", number);
printf("locale %d from \n",
local_data_image.info,
local_data_image.numero);
sleep(n);
}
}