#include #include #define RIT 10000 void *scrittore(); void use_data_read(void); void think_up_data(void); void write_data_base(void); void read_data_base(void); void ritardo(int t); pthread_t TID; pthread_mutex_t mutex; // Semaforo per la variabile nrlett pthread_mutex_t arc; // Semaforo per l'accesso al database int nrlett; main() { printf("\n\t\tPROBLEMA DEI LETTORI SCRITTORI\n\n\n"); pthread_create(&TID, NULL, scrittore, NULL); while(1){ pthread_mutex_lock(&mutex); // Down su mutex nrlett++; if (nrlett == 1) pthread_mutex_lock(&arc); // Down su arc pthread_mutex_unlock(&mutex); // Up su mutex read_data_base(); pthread_mutex_lock(&mutex); // Down su mutex nrlett--; if (nrlett == 0) pthread_mutex_unlock(&arc); // Up su arc pthread_mutex_unlock(&mutex); // Up su mutex use_data_read(); } pthread_join(TID, NULL); } void *scrittore() { while(1){ think_up_data(); pthread_mutex_lock(&arc); write_data_base(); pthread_mutex_unlock(&arc); } } void read_data_base(void) { int i; printf("\t\t\t\t| Lettore legge data base\n"); for(i=0;i