prodCons0.csp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. define NP 1
  2. define NC 4
  3. define N 4
  4. PRODUCTEUR ==
  5. nb : integer := 0; message : string;
  6. *[
  7. true ->
  8. message := "objet num " + nb;
  9. liste!prod(message);
  10. print ("production " + i + " : " + message + "\n");
  11. nb := nb + 1
  12. ]
  13. BUFFER ==
  14. tampon : [0..N-1] string := [0..N-1] "";
  15. dernier,premier,nb : integer := 0;
  16. message : string := "";
  17. *[
  18. (i:1..NP) nb /= N ; producteur[i]?prod(tampon[dernier]) ->
  19. dernier := (dernier + 1) mod N; nb:=nb+1;
  20. print ("P - positions " + " : " + premier + dernier + " - nbr d'elements : " + nb + "\n")
  21. []
  22. (i:1..NC) nb = N & true; consommateur[i]!cons(tampon[premier],(N+dernier-premier)mod N) ->
  23. premier := (premier + 1) mod N; nb := nb-1;
  24. print ("C - positions " + " : " + premier + dernier + " - nbr d'elements : " + nb + "\n")
  25. ]
  26. CONSOMMATEUR ==
  27. message : string; k: integer;
  28. *[
  29. true ->
  30. liste?cons(message,k);
  31. print ("consommateur " + i + " : " + message + "\n");
  32. sleep(500*i)
  33. ]
  34. MAIN ==
  35. [
  36. producteur[i:1..NP] :: PRODUCTEUR
  37. ||
  38. consommateur[i:1..NC] :: CONSOMMATEUR
  39. ||
  40. liste :: BUFFER
  41. ]