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:
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;
}
è come se non funzionasse la lock su full.

Ho messo un contatore sulla funzione disegna per vedere quante iterazioni usava ed in pratica risulta che il processo non si blocca sulla wait..