prodCons0.csp 1.1 KB

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