SHARE
TWEET

Untitled

a guest Jan 12th, 2017 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Top