UniTO/anno2/YearI/SecondSem/VPC/labs/analisi/3.2/alg35.smv

33 lines
692 B
Text
Raw Normal View History

2018-11-22 13:09:11 +01:00
MODULE main
VAR
turn : 1..2;
p : process user(turn, 1, 2);
q : process user(turn, 2, 1);
ASSIGN
init(turn) := 1;
SPEC -- MUTUAL EXCLUSION
AG !(p.state = exit & q.state = exit)
SPEC -- DEADLOCK
AG (p.state = enter -> AF (p.state = exit | q.state = exit))
SPEC -- INDIVIDUAL STARVATION
AG (p.state = enter -> AF p.state = exit)
MODULE user(turnloc, myproc, otherproc)
VAR
state : {enter,exit};
ASSIGN
init(state) := enter;
next(state) :=
case
state = enter & turnloc = myproc : {enter,exit};
state = exit : enter;
TRUE : state;
esac;
next(turnloc) :=
case
state = exit : otherproc;
TRUE : turnloc;
esac;
FAIRNESS
running