(Проблема синхронизации) Как разрешить различным комбинациям разных экземпляров классов входить в критическую секцию? - PullRequest
0 голосов
/ 23 сентября 2019

Я решаю задачу на экзамене и не знаю, как решить следующий сценарий: У нас есть полицейский и преступники (отдельные классы).Эта проблема имеет следующие требования:

  • Существует полицейская машина вместимостью 4 пассажира
  • Запрещено въезд 1 полицейскому и 3 преступникам.В машину не допускаются 0 полицейских и 4 преступника.Разрешены все другие комбинации.
  • Когда в машину въезжают 4 пассажира, команда «Начать движение» должна выполнить только один полицейский
  • Другие требования к действиям после синхронизации предыдущего сценария

Я выяснил, что разрешенные комбинации: (Полицейский-Преступник): 2-2, 3-1, 4-0.

В основном проблема требует разрешения 4темы (2-2, 3-1, 4-0) для входа в критическую секцию.Как я могу реализовать разрешенные комбинации этих 4 потоков?

Я не уверен, как реализовать это с помощью семафоров, мониторов, защищенных переменных.

Полицейский:

// waits until it is valid to enter the car
System.out.println("Policeman enters in the car");

// when the four passengers are inside, one policeman prints the starting command
System.out.println("Start driving.");
Thread.sleep(100);

// (OTHER CODE...)

Преступник:

// waits until it is valid to enter the car
System.out.println("Criminal enters in the car");

// (OTHER CODE...)
...