define NP 1 define NC 4 define N 4 PRODUCTEUR == nb : integer := 0; message : string; *[ true -> message := "objet num " + nb; liste!prod(message); print ("production " + i + " : " + message + "\n"); nb := nb + 1 ] BUFFER == tampon : [0..N-1] string := [0..N-1] ""; dernier,premier,nb : integer := 0; message : string := ""; *[ (i:1..NP) nb /= N ; producteur[i]?prod(tampon[dernier]) -> dernier := (dernier + 1) mod N; nb:=nb+1; print ("P - positions " + " : " + premier + dernier + " - nbr d'elements : " + nb + "\n") [] (i:1..NC) nb = N & true; consommateur[i]!cons(tampon[premier],(N+dernier-premier)mod N) -> premier := (premier + 1) mod N; nb := nb-1; print ("C - positions " + " : " + premier + dernier + " - nbr d'elements : " + nb + "\n") ] CONSOMMATEUR == message : string; k: integer; *[ true -> liste?cons(message,k); print ("consommateur " + i + " : " + message + "\n"); sleep(500*i) ] MAIN == [ producteur[i:1..NP] :: PRODUCTEUR || consommateur[i:1..NC] :: CONSOMMATEUR || liste :: BUFFER ]