Salve a tutti,
ho un problema con questi due codici: entrambi usano i semafori posix per implementare il problema del produttore e consumatore ma è come se questi tipi di semafori non funzionassero. Ho provato a crearli in due modi diversi ma il problema è rimasto.
questo è il primo modo: http://rafb.net/p/Jk1tnh75.html
questo è il secondo: http://rafb.net/p/7k783e46.html
in entrambi, il problema penso che si trovi qua:
è come se non funzionasse la lock su full.codice:void scrivi_su_buffer(struct pos item) { Lock_Wait(empty); Lock_Wait(mutex_buffer); bufferpointer->buffer[bufferpointer->buffer_scrittura] = item; bufferpointer->buffer_scrittura = (bufferpointer->buffer_scrittura + 1) % DIM_BUFFER; Unlock_Signal(mutex_buffer); Unlock_Signal(full); } struct pos leggi_da_buffer(void) { struct pos item; Lock_Wait(full); Lock_Wait(mutex_buffer); item = bufferpointer->buffer[bufferpointer->buffer_lettura]; bufferpointer->buffer_lettura = (bufferpointer->buffer_lettura + 1) % DIM_BUFFER; Unlock_Signal(mutex_buffer); Unlock_Signal(empty); return item; }
Ho messo un contatore sulla funzione disegna per vedere quante iterazioni usava ed in pratica risulta che il processo non si blocca sulla wait..