//soluzione esercizio c.1 proposta dal prof Davoli Monitor mbuf{ #define MAXELEM 5 Condition ok2add; // buf.size() < MAXELEM Condition ok2get; // buf.size > 1 && buf.head().n <= wrec //Condition okToFUNZ quando posso eseguire quella FUNZ. buf = queue of struct {type val, int n}; int wrec = 0; void add(type data, int n){ if(buf.size() >= MAXELEM) ok2add.wait(); buf.add(data,n); if (buf.head().n <= wrec) // ok2get.signal(); } //può fare la add quando cè uno spazio per un elemento nel bounded buffer type get(void){ wrec++; if (buf.size == 0 || buf.head().n > wrec) ok2get.wait() wrec-- v = buf.head().val buf.head().n-- if (buf.head().n > 0) ok2get.signal() else buf.get() ok2add.signal() return v; }