Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Testo ##
- Scrivere il monitor altcolbb. Il monitor deve implementare le seguenti procedure entry:
- void write(color_t color, generic_type val);
- generic_type read(void);
- Esistono elementi di due colori diversi, rosso e blu.
- Altcolbb deve implementare un buffer limitato con la particolarità che gli elementi devono essere inseriti nel
- buffer (fino a un numero massimo MAX) a colori alternati:
- se l''ultimo elemento nel buffer è rosso il prossimo deve essere blu e viceversa.
- Quando il buffer è vuoto il primo elemento inserito puo essere sia rosso sia blu.
- ## Svolgimento ##
- monitor altcolbb{
- condition ok2goR;
- condition ok2goB;
- element buffer[MAX];
- int current_pos;
- procedure entry void write(color_t color, generic_type val){
- if ((current_pos > MAX) || ((current_pos != -1) && (buffer[current_pos].color == color))){
- if (color == Red){ ok2goR.wait();} //Se l'elemento è rosso
- else { ok2goB.wait();} //Se l'elemento è blu
- }
- current_pos ++;
- buffer[current_pos].color = color;
- buffer[current_pos].contenent = val;
- if (color == Red) {ok2goB.signal();}//se si possono aggiungere elementi blu
- else {ok2goR.signal();}//se si possono aggiungere elementi rossi
- }
- procedure entry generic_type read(void){
- if (current_pos > 0){
- element tmp = buffer[current_pos];
- current_pos --;
- if (current_pos == -1){
- if (random(0,1)){ok2goR.signal();}
- else {ok2goB.signal();}
- }
- else if (buffer[current_pos].color == Red){ ok2goR.signal();}
- else { ok2goB.signal();}
- return tmp;
- }
- else {
- return NULL;
- }
- }
- altcolbb (){
- int current_pos = -1;//Se current_pos sta a -1 significa che il buffer è vuoto, altrimenti segna il buffer massimo corrente
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement