home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
cs.rhul.ac.uk
/
www.cs.rhul.ac.uk.zip
/
www.cs.rhul.ac.uk
/
pub
/
CS375
/
peterson2.fdr2
< prev
next >
Wrap
Text File
|
1999-02-10
|
2KB
|
55 lines
-- Peterson's Algorithm in CSP: version 2
channel flag1set, flag1read, flag2set, flag2read:{1..2}.{|false,true|}
channel turnset, turnread:{1..2}.{1..2}
channel enter, critical, leave:{1..2}
FLAG1(v) = flag1set?x?y -> FLAG1(y)
[] flag1read.1.v -> FLAG1(v)
[] flag1read.2.v -> FLAG1(v)
FLAG2(v) = flag2set?x?y -> FLAG2(y)
[] flag2read.1.v -> FLAG2(v)
[] flag2read.2.v -> FLAG2(v)
TURN(v) = turnset?x?y -> TURN(y)
[] turnread.1.v -> TURN(v)
[] turnread.2.v -> TURN(v)
P1 = flag1set.1.true -> turnset.1.2 -> P1WAIT
P1WAIT = flag2read.1.true -> (turnread.1.2 -> P1WAIT
[] turnread.1.1 -> P1ENTER)
[] flag2read.1.false -> P1ENTER
P1ENTER = enter.1 -> critical.1 -> leave.1 -> flag1set.1.false -> P1
P2 = flag2set.2.true -> turnset.2.1 -> P2WAIT
P2WAIT = flag1read.2.true -> (turnread.2.1 -> P2WAIT
[] turnread.2.2 -> P2ENTER)
[] flag1read.2.false -> P2ENTER
P2ENTER = enter.2 -> critical.2 -> leave.2 -> flag2set.2.false -> P2
aP1 = {| flag1set.1, flag1read.1, flag2set.1, flag2read.1,
turnset.1, turnread.1, enter.1, critical.1, leave.1 |}
aP2 = {| flag1set.2, flag1read.2, flag2set.2, flag2read.2,
turnset.2, turnread.2, enter.2, critical.2, leave.2 |}
aF1 = {| flag1set,flag1read |}
aF2 = {| flag2set,flag2read |}
aT = {| turnset,turnread |}
PROCS = P1 [ aP1 || aP2 ] P2
FLAGS = FLAG1(false) [ aF1 || aF2 ] FLAG2(false)
VARS = FLAGS [ union(aF1,aF2) || aT ] TURN(1)
SYSTEM = PROCS [ union(aP1,aP2) || union(union(aF1,aF2),aT) ] VARS