//ENTRAMBE SONO CORRETTE MA QUELLA DOPO E' MEGLIO /* link del gruppo telegram: https://t.me/+b8Txn35l8GY1NzAy link della richiesta: https://t.me/c/1449061520/607 link del commento: https://t.me/c/1449061520/621 */ //Proposta: ( @LLibera , link richiesta: https://t.me/c/1449061520/611) //nome file: D_sem+data.txt //mi sono ispiratə a pag 163 di http://www.cs.unibo.it/~renzo/so/materiale2223/concorrenza2223.pdf //ovvero implementazione dei semafori tramite monitor + modifiche per aggiungere dati monitor DataSemaphore { Stack<datatype> s; // <-- aggiunta int value; condition c; /* value > 0 */ procedure entry datatype dP(void) { if (value == 0) c.wait(); value--; return s.pop(); // <-- aggiunta } procedure entry void dV(datatype data) { value++; s.push(data); // <-- aggiunta c.signal(); } DataSemaphore(void) { value = 0; } } /* Commento del professore (Renzo Davoli) su questa proposta (link: https://t.me/c/1449061520/621 ): "D: la soluzione: concisa e elegante." */ ----------------------------------------------------------------------------------------------------------------------------------- //Migliore Proposta: ( @wrd0wl , link richiesta: https://t.me/c/1449061520/614 ) monitor semdata{ condition ok; Stack<T> s; //LIFO T dP(void){ if(s.empty()){ ok.wait(); } return s.pop(); } void dV(T data){ s.push(data); ok.signal(); } } /* Discussione su telegram: studente @wrd0wl : "l'esercizio chiede di non assegnare il valore iniziale nel costruttore" studente @LLibera : "E di considerarlo 0 quindi il costruttore fa solo l'inizializzazione a 0 senza prendere in input altri valori." studente @wrd0wl : (PROPONE la sol) "ho provato senza costruttore. però non sono sicura che questa soluzione è giusta" studente @LLibera : "A me sembra corretta, è anche più semplice di tutte le proposte fin ora." studente @wrd0wl : "hai controllato?" studente @LLibera : "no ma value del D è come se contasse quanti dati ci sono nello stack, quindi la tua proposta ha lo stesso funzionamento dei semafori, in più rispetta le richieste. E la richiesta dice che l'invariante deve essere lo stesso dei semafori, che mi sembra rispettato." studente @wrd0wl: "aspettiamo per la risposta del prof" COMMENTO DEL PROF (link: https://t.me/c/1449061520/622): "avete ragione, la soluzione è corretta e migliore anche della D proposta prima." */