Questo è il classico esercizio iniziale per spiegare la concorrenza, la soluzione me la ricordo ancora,
cmq ti consiglio di prendere un libro che lo spieghi bene, come questo qui, sul quale ho studiato:
W. Stallings, "Operating Systems", 6th ed., Prentice-Hall, 2009.
Da qualche parte lo trovi...
codice:
semaphore sem_buffer = m; // gestisce il buffer, per vedere se è pieno o vuoto
semaphore mutex = 1; // mutex sul buffer
semaphore z = 0; // Serve per bloccare il consumatore se non c'è nulla nel buffer
buffer b; // buffer sul quale lavorare;
Produttore()
{
while(1)
{
Obj o = produci();
wait(sem_buffer);
wait(mutex);
inserisci(o,b);
signal(mutex);
signal(z);
}
}
Consumatore()
{
while(1)
{
Obj o;
wait(z);
wait(mutex);
o = preleva(b);
signal(mutex);
signal(sem_buffer);
consuma(o);
}
}