64 lines
917 B
Java
64 lines
917 B
Java
|
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>
|
||
|
}
|