lecteurEcrivain0.csp 635 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. define NE 4
  2. define NL 11
  3. ECRIVAIN ==
  4. *[ true ->
  5. sleep (random(10,10000));
  6. ctrl!acces ();
  7. ressource := ressource + 1;
  8. sleep (1000);
  9. ctrl!libere ()
  10. ]
  11. LECTEUR ==
  12. *[ true ->
  13. ctrl!acces ();
  14. print ("ressource : " + ressource + "\n");
  15. ctrl!libere ()
  16. ]
  17. CTRL ==
  18. nl : integer := 0;
  19. *[
  20. (i:1..NL) lecteur[i]?acces() -> nl := nl + 1; print("(" + nl + ")" + "\n")
  21. []
  22. (i:1..NL) lecteur[i]?libere () -> nl := nl - 1
  23. []
  24. (i:1..NE) nl=0; ecrivain[i]?acces () -> ecrivain[i]?libere ()
  25. ]
  26. MAIN ==
  27. ressource : integer := 0;
  28. [
  29. ecrivain [i:1..NE] :: ECRIVAIN
  30. ||
  31. lecteur [i:1..NL] :: LECTEUR
  32. ||
  33. ctrl :: CTRL
  34. ]