Cosi come l'ho scritto funziona ma non rispetta le specifiche dell'homework. Infatti i metodi put e get devono avere come parametri buffer_t* e msg_t*(per intenderci put_bloccante(buffer_t* buffer,msg_t* msg))
Io ho provato a scrivere il metodo put_bloccante in questo modo:
msg_t* put_bloccante(buffer_t *buffer,msg_t* msg){
msg = msg_init_string("Messaggio");
pthread_mutex_lock(&buffer->mutex);
while(buffer->K==buffer->N){
printf("Il Produttore è in attesa che il buffer sia vuoto\n");
pthread_cond_wait(&buffer->non_pieno,&buffer->mutex);
}
buffer->buffer_circolare[buffer->D]=msg_copy_string(msg);
printf("Il produttore inserisce il messaggio\n");
buffer->D=(buffer->D+1)%buffer->N;
buffer->K=buffer->K+1;
pthread_cond_signal(&buffer->non_vuoto);
pthread_mutex_unlock(&buffer->mutex);
return msg;
/**}else return BUFFERERROR;*/
}
Ma se eseguo tale metodo(invocandolo nel main mediante pthread_create(&th1,NULL,put_bloccante,(buffer_vuoto,msg))) non mi viene visualizzato in output alcun tipo di messaggio.
Volevo sapere se qualcuno mi potesse aiutare nel trovare l'errore e farmi capire dove sbaglio