define NE 1 define NL 111 ECRIVAIN == *[ true -> sleep (random(10,10000)); ctrl ! acces (); print("Writing "); ressource := ressource + 1; print(ressource); sleep (1000); print(" done.\n"); ctrl ! libere () ] LECTEUR == *[ true -> ctrl ! acces (); print ("Read : " + ressource + "\n"); ctrl ! libere () ] CTRL == nl : integer := 0; *[ (i:1..NL) lecteur[i] ? acces() -> nl := nl + 1; print("+ 1 : " + nl + " readers\n") [] (i:1..NL) lecteur[i] ? libere () -> nl := nl - 1 ; print("- 1 : " + nl + " readers\n") [] (i:1..NE) nl = 0; ecrivain[i] ? acces () -> ecrivain[i] ? libere () ] MAIN == ressource : integer := 0; [ ecrivain [i:1..NE] :: ECRIVAIN || lecteur [i:1..NL] :: LECTEUR || ctrl :: CTRL ]