//ricevimento 2023 07 05 (luglio) //proposta da Simone e controllata dal prof monitor semtimeout() { int init = 0; //nei positivi = value, nei negativi = quanti sono in attesa List (Int, Condition) processes; bool activatedByTimeout = false; public void entry V(void) { init++; processes.head().second.signal(); // secondo campo della testa di process --> la condizione processes.remove(process); } public boolean entry P(unsigned int timeout) { init--; if(init < 0) { c = new condition() processes.insert(timeout, c); //inserisce in coda c.wait(); } if(activatedByTimeout == true) { init++; activatedByTimeout = false; return true; } else { activatedByTimeout = false; return false; } } public void entry tick(void) { for(process : processes) { process.first--; if(process.first < 0) { activatedByTimeout = true; process.second.signal(); processes.remove(process); //ovunque sia nella struttura dati } } } }