ProvaTeorica 2013.07.19
Jump to navigation
Jump to search
Esecizio C1: scrivere un monitor m vie che gestisca M buffer limitati. Ogni buffer ha l'ampiezza di M ELEM elementi. I produttori chiamano la procedure entry: put(generic *object) mentre i consumatori chiamano la procedure entry generic *get(int n) I produttori conferiscono un vettore di M element i, uno per ogni buffer al buffer. Per esempio put( v ), (dove v e' un vettore di M elementi) inserisce ogni elemento del vettore nel buffer corrispondente. I consumatori ricevono un oggetto dal buffer indicato come parametro oggetti ma attendono sempre che ci sia almeno un elemento in ogni buffer.
Mia Soluzione:
/*AreEmpy: */
/*true quando almeno un buff é vuoto*/
/*false quando tutti hanno almeno un elemento*/
bool areEmpy(*buff){
for(int a = 0; a<M;a++){
if(buff[a].lengh != 0){
return true;
}
}
return false;
}
/*AreFull: */
/*true quando almeno un buff é pieno*/
/*false quando sono tutti non pieni*/
bool areFull(*buff){
for(int a = 0; a<M;a++){
if (buff[a].lengh == MELEM){
return true;
}
}
return false;
}
monitor mvie{
put(generic *object){
if( areFull(buff) )
oktoput.wait();
for(int a = 0; a<M;a++){
buf[a].queue(object[a]);
}
for(int a = 0; a<M;a++){
oktoget[a].signal();//tutti i buffer hanno almeno un elemento quindi manda la signal a tutti i lettori
}
}
generic *get(int i){
if( areEmpty(buff))
oktoget.wait();
buf[i].dequeue();
if(!areFull(buf)) // se cé spazio in tutti i buffer manda la signal per scrivere
oktoput.signal();
}
}
- Midolo