[C] produttore consumatore semafori - buffer circolare

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
MrX87
Prode Principiante
Messaggi: 51
Iscrizione: lunedì 10 dicembre 2007, 15:55

[C] produttore consumatore semafori - buffer circolare

Messaggio da MrX87 »

Ciao a tutti ragazzi avevo da proporre una soluzione sulla implementazione di produttore consumatore con 2 semafori e 1 mutex per la gestione dell'accesso alla zona critica ovvero un buffer circolare sul quale agiscono produttore che consumatore.
Riporto sotto le implementazioni in pseudo-codice, unica particolarità è che non ho usato i semafori inizializzati alla dimensione del buffer; ho implementato la soluzione così perchè sul buffer non scrivo un byte alla volta ma varia di volta in volta la scrittura e anche la parte del consumatore: consumo un numero sempre variabile di byte dal buffer.....

Codice: Seleziona tutto

sem_init(&full, 0, 0);
sem_init(&empty, 0, 0);
pthread_mutex_init(&mutex,NULL);

Codice: Seleziona tutto

producer() {
        If ( buffer_full ) 	  sem_wait(full); 

       pthread_mutex_lock(&mutex);
	… // fill some slot  
       pthread_mutex_unlock(&mutex);

       sem_getvalue(empty,&state);
       If ( state < 0 )  sem_post(empty);
}

Codice: Seleziona tutto

consumer() {
        If ( buffer_empty ) 	sem_wait(empty);

       pthread_mutex_lock(&mutex);
	… // empty some slot
       pthread_mutex_unlock(&mutex);

      sem_getvalue(full,&state);
      If ( state < 0 )  sem_post(full);
}
MrX87
Prode Principiante
Messaggi: 51
Iscrizione: lunedì 10 dicembre 2007, 15:55

Re: [C] produttore consumatore semafori - buffer circolare

Messaggio da MrX87 »

Ho guardato sul silberschatz e questa implementazione non è riportata......mmmm....più che altro volevo anche sapere se secondo voi potesse funzionare anche con più produttori e più consumatori....a livello teorico non dovrebbe.......però magari sbaglio io......
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti