giorno prima
This commit is contained in:
parent
233233ee43
commit
0a7668d13f
13 changed files with 986 additions and 0 deletions
|
@ -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
|
||||
<butta>
|
||||
}
|
||||
<friggi>
|
||||
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){
|
||||
<attendi clienti>
|
||||
send("piero") to vassoio.piero_rosa; // Comunica al vassoio che deve servire un cliente
|
||||
p = receive(mess) from servi; // Aspetta di poter servire
|
||||
<servo cliente>
|
||||
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
|
||||
}
|
||||
}
|
|
@ -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) <butta i bomboloni> // Se c'erano bomboloni scaduti, li butta
|
||||
<Friggi bomboloni>
|
||||
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;
|
||||
<Servi>
|
||||
}
|
||||
}
|
||||
|
||||
process mario(){
|
||||
while(true){
|
||||
alpha.mario;
|
||||
}
|
||||
}
|
||||
|
||||
process rosa(){
|
||||
while(true){
|
||||
waitTimer()
|
||||
alpha.rosa;
|
||||
}
|
||||
}
|
|
@ -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
|
||||
<butta>
|
||||
}
|
||||
<friggi>
|
||||
setTimer(60);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
process Piero{
|
||||
entry riprendi();
|
||||
String mess;
|
||||
|
||||
while(true){
|
||||
<attendi clienti>
|
||||
call vassoio.piero_rosa("piero"); // Comunica al vassoio che deve servire un cliente
|
||||
<servo 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
|
||||
}
|
||||
}
|
|
@ -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(){
|
||||
<friggi>
|
||||
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) <Butta> // Se c'erano bomboloni scaduti, li butta
|
||||
<Friggi bomboloni>
|
||||
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
|
||||
<Servi>
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -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){
|
||||
<butta>
|
||||
}
|
||||
<friggi>
|
||||
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;
|
||||
<servo clienti>
|
||||
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
|
||||
<Mangia bombolone> // Frigge il timer
|
||||
|
||||
}
|
|
@ -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) <butta i bomboloni>
|
||||
<friggi bomboloni>
|
||||
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--;
|
||||
<Servi>
|
||||
}
|
||||
else{ // ..altrimenti lo serve e lo sveglia
|
||||
b--;
|
||||
<Servi>
|
||||
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();
|
||||
<Mangia>
|
||||
}
|
|
@ -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){
|
||||
<butta>
|
||||
}
|
||||
<friggi>
|
||||
setTimer(60);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
process Piero{
|
||||
entry cliente();
|
||||
entry riprendi();
|
||||
String mess;
|
||||
|
||||
while(true){
|
||||
accept cliente() // Aspetta un cliente
|
||||
{
|
||||
call vassoio.piero_rosa("piero");
|
||||
<servo clienti>
|
||||
}
|
||||
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
|
||||
<Mangia bombolone>
|
||||
}
|
|
@ -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(){
|
||||
<friggi>
|
||||
b=30;
|
||||
setTimer(60);
|
||||
V(piero);
|
||||
while(true){
|
||||
P(mario);
|
||||
if(b>0) <Butta>
|
||||
<Friggi>
|
||||
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);
|
||||
<Servi>
|
||||
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
|
||||
<Mangia bombolone>
|
||||
}
|
|
@ -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
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
<butta>
|
||||
<friggi>
|
||||
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){
|
||||
<attendi clienti>
|
||||
send("piero") to vassoio.piero_rosa;
|
||||
p = receive(mess) from servi;
|
||||
<servo cliente>
|
||||
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){
|
||||
<aspetta un secondo>
|
||||
send(s) to clock.tick;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
monitor Clock{
|
||||
condition attesa;
|
||||
int tempo = <tempo di inizializzazione>;
|
||||
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) <butta i bomboloni>
|
||||
<friggi bomboloni>
|
||||
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();
|
||||
<Servi>
|
||||
}
|
||||
}
|
||||
|
||||
process mario(){
|
||||
while(true){
|
||||
alpha.mario();
|
||||
}
|
||||
}
|
||||
|
||||
process rosa(){
|
||||
while(true){
|
||||
clock.waitTimer()
|
||||
alpha.rosa();
|
||||
}
|
||||
}
|
||||
|
||||
process Tempo{
|
||||
while(true){
|
||||
<"aspetta un secondcondo">
|
||||
clock.tick();
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
<butta>
|
||||
<friggi>
|
||||
call clock.setTimer(60);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
process Piero{
|
||||
entry riprendi();
|
||||
String mess;
|
||||
|
||||
while(true){
|
||||
<attendi clienti>
|
||||
call vassoio.piero_rosa("piero");
|
||||
<servo cliente>
|
||||
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){
|
||||
<aspetta un secondo>
|
||||
call clock.tick;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue