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); } }

Rispondi quotando
