lecteurEcrivain_famineEcrivain.csp 752 B

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