|
@@ -0,0 +1,45 @@
|
|
|
+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
|
|
|
+ ]
|