Логика за мониторной программой - PullRequest
0 голосов
/ 09 октября 2019

В настоящее время я пытаюсь решить проблему «ванной унисекс», описанную в [этой книге], (http://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf) ограничения: - если ванная комната пуста, в нее может войти мужчина или женщина - если мужчинаили женщина в ванной, может войти только тот же пол - в ванной уже может быть только два человека

Меня смущает то, что хотя у меня есть некоторое представление о том, как работает логика, яЯ не уверен, где / как реализовать этот код. Например, у меня есть класс с именем 'employee', который расширяет поток и может установить переменную, которая показывает, являются ли они мужчинами или женщинами. У меня также есть класс 'bathroom', который также расширяет потоккоторый содержит семафор под названием «используется», который предназначен для определения того, заполнена ли ванная комната. Я пытался реализовать структуру светового переключателя, приведенную в книге, которая, как я полагаю, является просто монитором. Я не понимаю, как это блокирует конкретныйтип потока.

Мой вопрос: где хранить переменные семафора и каковыПервый способ получить к ним доступ для реализации остальной логики?

РЕДАКТИРОВАТЬ: Когда я ссылаюсь на переключатель света, я имею в виду структуру на странице 70, а проблема ванной комнаты находится на странице 170.

Класс ванной комнаты содержит:

  Semaphore being_used = new Semaphore(1);

Класс сотрудника содержит:

    private String id;
    private int time;
    private String type;
    private Boolean finished;
    private Bathroom b_room;

1 Ответ

0 голосов
/ 09 октября 2019

Не читая книгу ... Семафор принадлежит ванной комнате: если бы у вас было три ванные комнаты и семь пользователей, у вас было бы три семафора, а не один, не семь. Лицензию на семафор следует приобретать всякий раз, когда пользователь применяет ванную для входа, и выдавать, когда ему отправляется сообщение о выходе или если входящему пользователю отказано во входе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...