/* Programma di esempio dei semafori .... * Implementazione con il meccanismo semaforico del meccanismo * visto nel file condition.c */ #include #include #include #include /* Numero di cicli di lettura/scrittura che vengono fatti dai thread */ #define CICLI 1 /* Lunghezza del buffer */ #define LUN 20 /* Numero di cicli di attesa a vuoto di uno scrittore */ #define DELAY_WRITER 200000 /* Numero di cicli di attesa a vuoto di uno scrittore */ #define DELAY_READER 2000000 /* Memoria Condivisa fra i thread ... */ struct { char scritta[LUN+1]; /* variabili per la gestione del buffer */ int primo, ultimo; /* Variabili semaforiche */ sem_t mutex, piene, vuote; } shared; /* Forward declaration */ void *scrittore1(void *); void *scrittore2(void *); void *lettore(void *); int main(void) { pthread_t s1TID, s2TID, lTID; int res, i; /* Fase di inzializzazione delle strutture dati */ for(i=0; i