Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Init() {
- // De sluis werkt in de NZ-richting in het begin
- char huidigeRichting = 'Z';
- Condition wachtZuid = new Condition();
- int botenNaarZuid = 0;
- Mutex zuidMutex = new Mutex();
- Condition wachtNoord = new Condition();
- int botenNaarNoord = 0;
- Mutex noordMutex = new Mutex();
- Condition sluis = new Condition();
- Mutex sluisMutex = new Mutex();
- }
- Sluis() {
- while (true) {
- // Controleer eerst de boten naar het zuiden.
- if (huidigeRichting == 'Z') {
- zuidMutex.acquire();
- if (botenNaarZuid > 0) {
- botenNaarZuid = 0;
- wachtZuid.broadCast(zuidMutex);
- // Draai richting om.
- huidigeRichting = 'N';
- } else {
- zuidMutex.release();
- // Check even de andere richting
- noordMutex.acquire();
- if (botenNaarNoord > 0) {
- botenNaarNoord = 0;
- noordMutex.broadCast(noordMutex);
- }
- noordMutex.release();
- }
- } else {
- // Idem maar omgekeerd
- }
- noordMutex.acquire();
- zuidMutex.acquire();
- while (botenNaarNoord == 0 && botenNaarZuid == 0) {
- sluisMutex.acquire();
- sluis.wait(noordMutex, zuidMutex);
- sluisMutex.release();
- }
- zuidMutex.release();
- noordMutex.release();
- }
- }
- Boot(richting) {
- if (richting == 'Z') {
- zuidMutex.acquire();
- while (botenNaarZuid >= 2) {
- wachtZuid.wait(zuidMutex);
- }
- botenNaarZuid++;
- sluisMutex.acquire();
- sluis.broadCast(sluisMutex);
- zuidMutex.release();
- } else {
- noordMutex.acquire();
- while (botenNaarNoord >= 2) {
- wachtNoord.wait(noordMutex);
- }
- botenNaarNoord++;
- sluisMutex.acquire();
- sluis.broadCast(sluisMutex);
- noordMutex.release();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement