From 0a7668d13f40f57600ae6ea7f05fe9cd9ebd370c Mon Sep 17 00:00:00 2001 From: Francesco Mecca Date: Mon, 3 Dec 2018 17:53:23 +0100 Subject: [PATCH] giorno prima --- .../bomboloni_sol/bomboloni-mess.java | 85 +++++++++++++ .../bomboloni_sol/bomboloni-mon.java | 61 +++++++++ .../bomboloni_sol/bomboloni-rend.java | 68 ++++++++++ .../bomboloni_sol/bomboloni-sem.java | 55 ++++++++ .../cliente/bomboloni-mess-cliente.java | 98 +++++++++++++++ .../cliente/bomboloni-mon-cliente.java | 79 ++++++++++++ .../cliente/bomboloni-rend-cliente.java | 76 +++++++++++ .../cliente/bomboloni-sem-cliente.java | 63 ++++++++++ .../bomboloni_sol/mia_messagepassing | 19 +++ .../esercizi2019/bomboloni_sol/mia_rendevouz | 73 +++++++++++ .../timer/bomboloni-mess-clock.java | 119 ++++++++++++++++++ .../timer/bomboloni-mon-clock.java | 95 ++++++++++++++ .../timer/bomboloni-rend-clock.java | 95 ++++++++++++++ 13 files changed, 986 insertions(+) create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mess.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mon.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-rend.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-sem.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mess-cliente.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mon-cliente.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-rend-cliente.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-sem-cliente.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_messagepassing create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_rendevouz create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mess-clock.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mon-clock.java create mode 100644 anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-rend-clock.java diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mess.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mess.java new file mode 100644 index 0000000..e5fc0ad --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mess.java @@ -0,0 +1,85 @@ +process vassoio{ + int b = 0; + port String piero_rosa; + String mess; + port signal rilascio_vassoio; + signal s; + boolean attesaPiero = false; + process pMario; + process pPieroRosa; + + send(b) to mario.friggi; // Chiede a Mario di friggere + pMario = receive(s) from rilascio_vassoio; // Aspetta che frigga + b = 30; + while(true){ + pPieroRosa = receive(mess) from piero_rosa; // Aspetta i messaggi da Piero o da Rosa + if(mess=="piero"){ + b--; + if(b==0){ // Se era l'ultimo bombolone.. + attesaPiero = true; + send("finiti") to pPieroRosa.servi; // ..dice a Piero che sono finiti + setTimer(0); // e va a svegliare Rosa + } + else{ + send("non finiti") to pPieroRosa.servi; // altrimenti dice a Piero che ci sono ancora bomboloni + } + } + else if(mess=="rosa"){ + send(b) to mario.friggi; // Chiede a Mario di friggere + pMario = receive(s) from rilascio_vassoio; // Aspetta che frigga + b = 30; + send(s) to rosa.rilascio_rosa; // Avverte Rosa che Mario ha fritto + if(attesaPiero) { // Se Piero ha venduto l'ultimo ed era in attesa.. + attesaPiero = false; + send(s) to piero.riprendi; // ..lo sveglia + } + } + } +} + +process Mario{ + process p; + signal s; + port int friggi; + int b_rim; + + while(true){ + p = receive(b_rim) from friggi; // Aspetta di essere fritto dal vassoio + if(b_rim>0){ // Se c'erano bomboloni scaduti, li butta + + } + + setTimer(60); + send(s) to p.rilascio_vassoio; // Comunica al vassoio che è fritto + } +} + +process Piero{ + process p; + port signal riprendi; + signal s; + port String servi; + String mess; + + while(true){ + + send("piero") to vassoio.piero_rosa; // Comunica al vassoio che deve servire un cliente + p = receive(mess) from servi; // Aspetta di poter servire + + if(mess == "finiti"){ // Se il vassoio comunica che i bomboloni sono finiti.. + p = receive(s) from riprendi; // ..si mette in attesa di poter riprendere + } + } +} + +process Rosa{ + port signal rilascio_rosa; + signal s; + process p; + + while(true){ + waitTimer(); + send("rosa") to vassoio.piero_rosa; // Avverte il vassoio di far friggere Mario + p = receive(s) from rilascio_rosa; // Aspetta che sia fritto + } +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mon.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mon.java new file mode 100644 index 0000000..ebfa650 --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-mon.java @@ -0,0 +1,61 @@ +monitor bomboloni{ + int b = 0 + conditionition mario; + condition piero; + condition cliente; + condition rosa; + boolean deveFriggere = false; + + public void mario(){ + if (!deveFriggere) wait(mario); // Si blocca in attesa che Rosa lo sblocchi per friggere + if(b>0) // Se c'erano bomboloni scaduti, li butta + + deveFriggere = false; + b=30; + setTimer(60); + signal(piero); // Sblocca Piero + if(!empty(rosa)){ // Se Rosa prende il monitor prima di Mario resterà in attesa e.. + signal(rosa); // ..verrà svegliata dopo che Mario ha fritto + } + } + + public void piero(){ + if (b == 0){ // Quando finiscono i bomboloni.. + setTimer(0); // ..sveglia Rosa + wait(piero); // e si mette in attesa + } + wait(cliente); + b--; + } + + public void rosa(){ + deveFriggere = true; // Se Rosa viene svegliata dobbiamo sicuramente friggere + if(!empty(mario)){ // Se Mario è già arrivato, lo sveglia + signal(mario); + } + else{ + wait(rosa); // Altrimenti si mette in attesa che Mario arrivi + } + } +} + +bomboloni alpha; +process piero(){ + while(true){ + alpha.piero; + + } +} + +process mario(){ + while(true){ + alpha.mario; + } +} + +process rosa(){ + while(true){ + waitTimer() + alpha.rosa; + } +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-rend.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-rend.java new file mode 100644 index 0000000..09d1b18 --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-rend.java @@ -0,0 +1,68 @@ +process vassoio{ + int b = 0; + entry piero_rosa(in String inMess, out String outMess); + boolean attesaPiero = false; + + call mario.friggi(b); // Chiama Mario per friggere + b = 30; + while(true){ + accept piero_rosa(in String inMess, out String outMess) // Aspetta una richiesta da Piero o da Rosa + { + if(inMess=="piero"){ + b--; + if(b==0){ // Se era l'ultimo bombolone.. + attesaPiero = true; + outMess = "finiti"; // setta l'output per dire a Piero che sono finiti + setTimer(0); // e va a svegliare Rosa + } + else{ + outMess = "non finiti"; // setta l'output per dire a Piero che non sono finiti + } + } + else if(inMess=="rosa"){ + call mario.friggi(b); // Chiede a Mario di friggere + b = 30; + if (attesaPiero) { // Se Piero ha venduto l'ultimo ed era in attesa.. + attesaPiero = false; + call piero.riprendi(); // ..lo sveglia + } + } + } + } +} + +process Mario{ + entry friggi(in int b_rim); + + while(true){ + accept friggi(in int b_rim) // Aspetta di essere fritto dal vassoio + { + if(b_rim>0){ // Se c'erano bomboloni scaduti, li butta + + } + + setTimer(60); + } + } +} + +process Piero{ + entry riprendi(); + String mess; + + while(true){ + + call vassoio.piero_rosa("piero"); // Comunica al vassoio che deve servire un cliente + + if (mess == "finiti") { // Se il vassoio comunica che i bomboloni sono finiti.. + accept riprendi() // ..si mette in attesa di poter riprendere + } + } +} + +process Rosa{ + while(true){ + waitTimer(); + call vassoio.piero_rosa("rosa"); // Avverte il vassoio di far friggere Mario + } +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-sem.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-sem.java new file mode 100644 index 0000000..56d704e --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/bomboloni-sem.java @@ -0,0 +1,55 @@ +semaphoreaphore mario = 0; +semaphore cliente = 0; +semaphore mutex = 1; +semaphore rosa = 0; +semaphore piero = 0; +int b = 0; +boolean attesaPiero = false; + +process mario(){ + + b=30; + setTimer(60); + V(piero); // Serve a Piero per partire + while(true){ + P(mario); // Si blocca in attesa che Rosa lo sblocchi per friggere + if(b>0) // Se c'erano bomboloni scaduti, li butta + + b=30; + setTimer(60); + if(attesaPiero){ // Se erano finiti i bomboloni dobbiamo sbloccare Piero con la V(piero) + attesaPiero = false; + V(piero); + } + V(rosa); // Sblocchiamo Rosa + } +} + +process piero(){ + P(piero); // Blocca Piero per la prima esecuzione. Viene sbloccato da Mario + while(true){ + P(cliente); // Attende il cliente + P(mutex); // Per la mutua esclusione con Rosa + + b--; + if(b==0){ // Quando finiscono i bomboloni.. + attesaPiero = true; + setTimer(0); // ..sveglia Rosa + V(mutex); + P(piero); // e Piero si mette in attesa. Sarà svegliato da Mario + } + else{ + V(mutex); + } + } +} + +process rosa(){ + while(true){ + waitTimer(); // Bloccata sulla waitTimer(). All'inizio timer=+infinito. Settato a 60 da Mario + P(mutex); // Per la mutua esclusione con Piero + V(mario); // Sveglia Mario + P(rosa); // Si blocca in attesa che Mario frigga + V(mutex); + } +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mess-cliente.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mess-cliente.java new file mode 100644 index 0000000..6a47eaf --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mess-cliente.java @@ -0,0 +1,98 @@ +process vassoio{ + int b = 0; + port String piero_rosa; + String mess; + port signal rilascio_vassoio; + signal s; + process pPieroRosa; + process pMario; + boolean attesaPiero = false; + + send(b) to Mario.friggi; + pMario = receive(s) from rilascio_vassoio; + b = 30; + while(true){ + pPieroRosa = receive(mess) from piero_rosa; + if(mess=="piero"){ + b--; + if(b==0){ + attesaPiero = true; + send("finiti") to pPieroRosa.servi; + setTimer(0); + } + else{ + send("non finiti") to pPieroRosa.servi; + } + } + else if(mess=="rosa"){ + send(b) to Mario.friggi; + pMario = receive(s) from rilascio_vassoio; + b = 30; + send(s) to Rosa.rilascio_rosa; + if(attesaPiero) { + attesaPiero = false; + send(s) to Piero.riprendi; + } + } + } +} + +process Mario{ + process p; + signal s; + port int friggi; + int b_rim; + while(true){ + p = receive(b_rim) from friggi; + if(b_rim>0){ + + } + + setTimer(60); + send(s) to p.rilascio_vassoio; + + } +} + +process Piero{ + process pCliente; + process pVassoio; + port signal riprendi; + signal s; + port String servi; + String mess; + port signal cliente; + + while(true){ + pCliente = receive(s) from cliente; // Aspetta un cliente + send("piero") to vassoio.piero_rosa; + pVassoio = receive(mess) from servi; + + send(s) to pCliente.rilascio_cliente; // Comunica al cliente che lo ha servito + if(mess == "finiti"){ + p = receive(s) from riprendi; + } + } +} + +process Rosa{ + port signal rilascio_rosa; + signal s; + process p; + while(true){ + waitTimer(); + send("rosa") to vassoio.piero_rosa; + p = receive(s) from rilascio_rosa; + } +} + +process Cliente{ + port signal rilascio_cliente; + process p; + signal s; + + send(s) to Piero.cliente; // Chiede a Piero un bombolone + p = receive(s) from rilascio_cliente; // Aspetta di riceverlo + // Frigge il timer + +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mon-cliente.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mon-cliente.java new file mode 100644 index 0000000..5c74d9e --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-mon-cliente.java @@ -0,0 +1,79 @@ +monitor bomboloni{ + int b = 0; + condition mario; + condition piero; + condition cliente; + condition codaPiero; + condition rosa; + boolean deveFriggere = false; + + public void mario(){ + if (!deveFriggere) wait(mario); + if(b>0) + + deveFriggere = false; + b=30; + setTimer(60); + signal(piero); + if(!empty(rosa)){ + signal(rosa); + } + } + + public void piero(){ + if (b == 0){ + setTimer(0); + wait(piero); + } + if(empty(codaPiero)){ // Se non è ancora arrivato il cliente, Piero si mette in attesa.. + wait(cliente); + b--; + + } + else{ // ..altrimenti lo serve e lo sveglia + b--; + + signal(codaPiero); + } + } + + public void rosa(){ + deveFriggere = true; + if(!empty(mario)){ + signal(mario); + } + else{ + wait(rosa); + } + } + + public void cliente(){ + if(empty(cliente)) wait(codaPiero); // Se Piero non è ancora arrivato si mette in attesa.. + else signal(cliente) // ..altrimenti sveglia Piero + } +} + +bomboloni alpha; +process piero(){ + while(true){ + alpha.piero(); + } +} + +process mario(){ + while(true){ + alpha.mario(); + } +} + +process rosa(){ + while(true){ + waitTimer() + alpha.rosa(); + } +} + +process cliente(){ + alpha.cliente(); + +} diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-rend-cliente.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-rend-cliente.java new file mode 100644 index 0000000..2eada68 --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-rend-cliente.java @@ -0,0 +1,76 @@ +process vassoio{ + int b = 0; + entry piero_rosa(in String inMess, out String outMess); + boolean attesaPiero = false; + + call mario.friggi(b); + b = 30; + while(true){ + accept piero_rosa(in String inMess, out String outMess) + { + if(inMess=="piero"){ + b--; + if(b==0){ + outMess = "finiti"; + attesaPiero = true; + setTimer(0); + } + else{ + outMess = "non finiti"; + } + } + else if(inMess=="rosa"){ + call mario.friggi(b); + b = 30; + if (attesaPiero) { + attesaPiero = false; + call Piero.riprendi(); + } + } + } + } +} + +process Mario{ + entry friggi(in int b_rimasti); + + while(true){ + accept friggi(in int b_rim) + { + if(b_rim>0){ + + } + + setTimer(60); + } + } +} + +process Piero{ + entry cliente(); + entry riprendi(); + String mess; + + while(true){ + accept cliente() // Aspetta un cliente + { + call vassoio.piero_rosa("piero"); + + } + if (mess == "finiti") { + accept riprendi() + } + } +} + +process Rosa{ + while(true){ + waitTimer(); + call vassoio.piero_rosa("rosa"); + } +} + +process Cliente{ + call Piero.cliente(); // Chiede a Piero un bombolone + +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-sem-cliente.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-sem-cliente.java new file mode 100644 index 0000000..17aa5e7 --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/cliente/bomboloni-sem-cliente.java @@ -0,0 +1,63 @@ +semaphore mario = 0; +semaphore cliente = 0; +semaphore mutex = 1; +semaphore rosa = 0; +semaphore ricevi = 0; +semaphore piero = 0; +int b = 0; +boolean attesaPiero = false; + +process mario(){ + + b=30; + setTimer(60); + V(piero); + while(true){ + P(mario); + if(b>0) + + b=30; + setTimer(60); + if(attesaPiero){ + attesaPiero = false; + V(piero); + } + V(rosa); + } +} + +process piero(){ + P(piero); + while(true){ + P(cliente); // Aspetta la richiesta del cliente + P(mutex); + + V(ricevi); // Sblocca il cliente + b--; + if(b==0){ + attesaPiero = true; + setTimer(0); + V(mutex); + P(piero); + } + else{ + V(mutex); + } + } +} + +process rosa(){ + while(true){ + waitTimer(); + P(mutex); + V(mario); + P(rosa); + V(mutex); + } +} + +process cliente(){ + V(cliente); // Richiede bombolone svegliando Piero + P(ricevi); // Aspetta di ricevere il bombolone da Piero + +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_messagepassing b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_messagepassing new file mode 100644 index 0000000..106a6b8 --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_messagepassing @@ -0,0 +1,19 @@ +Process Bancone { + int nbomb = 0; + long tick = 0; + long alarm = -1; + boolean butta = false; + signal s; + port signal friggi_i; + port signal friggi_f; + port signal servi_i; + port signal servi_f; + port signal wait_timer; + port long set_timer; + port signal scaduti; + + do + [] nbomb == 0 or butta; p = receive(s) from friggi_i -> + send(s) to p.ok; + + [] ; receive(s) from friggi_f diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_rendevouz b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_rendevouz new file mode 100644 index 0000000..e98310f --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/mia_rendevouz @@ -0,0 +1,73 @@ +Process Bancone { + int nbomb = 0; + long tick = 0, alarm = -1; + bool butta = false; + entry friggi_i; + entry friggi_f; + entry servi_cliente_i; + entry servi_cliente_f; + entry scaduti; + entry clock; + entry wait_timer; + entry set_timer (in long n); + + do + [] nbomb == 0 or butta; accept friggi_i(); + + [] ; accept friggi_f() -> + nbomb = 30; + alarm = tick + minuti(60); + butta = false; + + [] nbomb > 0 and !butta; accept servi_cliente_i(); + + [] ; accept servi_cliente_f() -> + nbomb--; + + [] ; accept clock(); -> + tick++; + + [] tick >= alarm and alarm != -1; accept wait_timer() -> + butta = true; + nbomb = 0; + alarm = -1; + + [] ; accept set_timer(in long n) -> + alarm = tick + n; + + [] ; accept scaduti -> + butta = true; + od; +} + +Process Mario { + while(true){ + call Bancone.friggi_i(); + < friggi bomboloni > + call Bancone.friggi_f(); + } +} + +Process Piero { + while(true){ + call Bancone.servi_cliente_i(); + < servi cliente > + call Bancone.servi_cliente_f(); + } +} + +Process Rosa { + while(true){ + call Bancone.wait_timer(); + call Bancone.butta(); + < butta > + call Bancone.set_timer(60); + } +} + +Process Clock { + while(true){ + < hardware clock ticks > + call Bancone.clock(); + } +} diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mess-clock.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mess-clock.java new file mode 100644 index 0000000..5a35fcd --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mess-clock.java @@ -0,0 +1,119 @@ +process vassoio{ + int b = 0; + port String piero_rosa; + String mess; + port signal rilascio_vassoio; + signal s; + process p; + boolean attesaPiero = false; + + send(b) to mario.friggi; + p = receive(s) from rilascio_vassoio; + b = 30; + while(true){ + p = receive(mess) from piero_rosa; + if(mess=="piero"){ + b--; + if(b==0){ + attesaPiero = true; + send("finiti") to p.servi; + send(0) to clock.setTimer; + } + else{ + send("non finiti") to p.servi; + } + } + else if(mess=="rosa"){ + send(b) to mario.friggi; + p = receive(s) from rilascio_vassoio; + b = 30; + send(s) to rosa.rilascio_rosa; + if(attesaPiero){ + attesaPiero = false; + send(s) to Piero.riprendi; + } + } + } +} + +process Mario{ + process p; + signal s; + port int friggi; + int b_rim; + while(true){ + p = receive(b_rim) from friggi; + if(b_rim>0) + + + send(60) to clock.setTimer; + send(s) to p.rilascio_vassoio; + } +} + +process Piero{ + process p; + port signal riprendi; + signal s; + port String servi; + String mess; + while(true){ + + send("piero") to vassoio.piero_rosa; + p = receive(mess) from servi; + + if(mess == "finiti"){ + p = receive(s) from riprendi; + } + } +} + +process Rosa{ + port signal rilascio_rosa; + signal s; + process p; + while(true){ + send(s) to clock.waitTimer; + p = receive(s) from rilascio_rosa; + send("rosa") to vassoio.piero_rosa; + p = receive(s) from rilascio_rosa; + } +} + +process Clock{ + port Signal waitTimer; + port int setTimer; + port Signal tick; + signal s; + process p; + int min; + int tempo = 0; + int sveglia = 0; + boolean inAscolto = false; + do + [] p = receive(s) from tick; -> // Aumenta il tempo e se il timer scade.. + tempo++; + if(sveglia == tempo && inAscolto){ // ..se il tempo è uguale alla sveglia e Rosa è sulla receive... + inAscolto = false; + send(s) to rosa.rilascio_rosa; // ..allora sveglia Rosa + sveglia = 0; + } + [] p = receive(min) from setTimer; -> // Viene settato il Timer a zero o a 60 + sveglia = tempo + min; + if(sveglia == tempo && inAscolto){ // Se il tempo è uguale alla sveglia e Rosa è sulla receive... + inAscolto = false; + send(s) to rose.rilascio_rosa; // ..llora sveglia Rosa + sveglia = 0; + } + + [] p = receive(s) from waitTimer; -> // Si mette Rosa sulla receive accettando la send di waitTimer + inAscolto = true; + od +} +process Tempo{ + signal s; + while(true){ + + send(s) to clock.tick; + } +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mon-clock.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mon-clock.java new file mode 100644 index 0000000..c4e5229 --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-mon-clock.java @@ -0,0 +1,95 @@ +monitor Clock{ + condition attesa; + int tempo = ; + int sveglia = 0; + + public void tick(){ // Funzione che incrementa il tempo e controlla se deve svegliare Rosa + time++; + if(tempo==sveglia){ + signal(attesa); // Sveglia Rosa dalla waitTimer() + } + } + + public void waitTimer(){ + wait(attesa); + } + + public void setTimer(int min){ + if(min == 0){ // Se Piero ha fatto una setTimer(0).. + signal(attesa); // ..allora sveglio Rosa dalla waitTimer() + } + else{ + sveglia = tempo + min; // Altrimenti setto normalmente la sveglia + } + } + +} + +monitor bomboloni{ + int b = 0; + condition mario; + condition piero; + condition cliente; + condition rosa; + boolean deveFriggere = false; + + public void mario(){ + if (!deveFriggere) wait(mario); + if(b>0) + + deveFriggere = false; + b=30; + clock.setTimer(60); + signal(piero); + if(!empty(rosa))signal(rosa); + } + + public void piero(){ + if (b == 0){ + clock.setTimer(0); + wait(piero); + } + wait(cliente); + b--; + } + + public void rosa(){ + deveFriggere = true; + if(!empty(mario)){ + signal(mario); + } + else{ + wait(rosa); + } + } +} + +Bomboloni alpha; +Clock clock; + +process piero(){ + while(true){ + alpha.piero(); + + } +} + +process mario(){ + while(true){ + alpha.mario(); + } +} + +process rosa(){ + while(true){ + clock.waitTimer() + alpha.rosa(); + } +} + +process Tempo{ + while(true){ + <"aspetta un secondcondo"> + clock.tick(); + } +} \ No newline at end of file diff --git a/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-rend-clock.java b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-rend-clock.java new file mode 100644 index 0000000..1d12f0b --- /dev/null +++ b/anno2/YearI/FirstSem/MCAD/slides/esercizi2019/bomboloni_sol/timer/bomboloni-rend-clock.java @@ -0,0 +1,95 @@ +process vassoio{ + int b = 0; + boolean attesaPiero = false; + entry piero_rosa(in String inMess, out String outMess); + + call mario.friggi(b); + b = 30; + while(true){ + accept piero_rosa(in String inMess, out String outMess) + { + if(inMess=="piero"){ + b--; + if(b==0){ + outMess = "finiti"; + attesaPiero = true; + call clock.setTimer(0); + } + else{ + outMess = "non finiti"; + } + } + else if(inMess=="rosa"){ + call mario.friggi(b); + b = 30; + if (attesaPiero) { + attesaPiero = false; + call Piero.riprendi(); + } + } + } + } +} + +process Mario{ + entry friggi(in int b_rimasti); + while(true){ + accept friggi(in int b_rim) + { + if(b_rim>0) + + + call clock.setTimer(60); + } + } +} + +process Piero{ + entry riprendi(); + String mess; + + while(true){ + + call vassoio.piero_rosa("piero"); + + if (mess == "finiti") { + accept riprendi() + } + } +} + +process Rosa{ + while(true){ + call clock.waitTimer(); + call vassoio.piero_rosa("rosa"); + } +} + +process Clock{ + entry waitTimer(); + entry setTimer(in int min); + entry tick; + int tempo = 0; + int sveglia = 0; + do + [] accept tick -> tempo++; // Incrementa il tempo + [] accept setTimer(in int min) + { + if(min == 0){ // Se Piero ha fatto una setTimer(0).. + accept waitTimer() // ..allora sveglio Rosa dalla waitTimer() + } + else{ + sveglia = tempo + min; // Altrimenti setto normalmente la sveglia + } + } + [](tempo == sveglia); accept waitTimer() // Se è il momento di svegliare Rosa accettiamo la sua call + od +} + + +process Tempo{ + while(true){ + + call clock.tick; + } +} \ No newline at end of file