Advertisement
Guest User

Untitled

a guest
Jan 12th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. Init() {
  2. // De sluis werkt in de NZ-richting in het begin
  3. char huidigeRichting = 'Z';
  4.  
  5. Condition wachtZuid = new Condition();
  6. int botenNaarZuid = 0;
  7. Mutex zuidMutex = new Mutex();
  8.  
  9. Condition wachtNoord = new Condition();
  10. int botenNaarNoord = 0;
  11. Mutex noordMutex = new Mutex();
  12.  
  13. Condition sluis = new Condition();
  14. Mutex sluisMutex = new Mutex();
  15. }
  16.  
  17. Sluis() {
  18. while (true) {
  19. // Controleer eerst de boten naar het zuiden.
  20. if (huidigeRichting == 'Z') {
  21. zuidMutex.acquire();
  22. if (botenNaarZuid > 0) {
  23. botenNaarZuid = 0;
  24. wachtZuid.broadCast(zuidMutex);
  25. // Draai richting om.
  26. huidigeRichting = 'N';
  27. } else {
  28. zuidMutex.release();
  29. // Check even de andere richting
  30. noordMutex.acquire();
  31. if (botenNaarNoord > 0) {
  32. botenNaarNoord = 0;
  33. noordMutex.broadCast(noordMutex);
  34. }
  35. noordMutex.release();
  36. }
  37. } else {
  38. // Idem maar omgekeerd
  39. }
  40.  
  41. noordMutex.acquire();
  42. zuidMutex.acquire();
  43. while (botenNaarNoord == 0 && botenNaarZuid == 0) {
  44. sluisMutex.acquire();
  45. sluis.wait(noordMutex, zuidMutex);
  46. sluisMutex.release();
  47. }
  48. zuidMutex.release();
  49. noordMutex.release();
  50. }
  51. }
  52.  
  53. Boot(richting) {
  54. if (richting == 'Z') {
  55. zuidMutex.acquire();
  56. while (botenNaarZuid >= 2) {
  57. wachtZuid.wait(zuidMutex);
  58. }
  59. botenNaarZuid++;
  60. sluisMutex.acquire();
  61. sluis.broadCast(sluisMutex);
  62. zuidMutex.release();
  63. } else {
  64. noordMutex.acquire();
  65. while (botenNaarNoord >= 2) {
  66. wachtNoord.wait(noordMutex);
  67. }
  68. botenNaarNoord++;
  69. sluisMutex.acquire();
  70. sluis.broadCast(sluisMutex);
  71. noordMutex.release();
  72. }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement