Это мой сценарий.
У меня есть пул частот, и мой BaseStation
должен выбрать одну из них. Критическая секция для BaseStation
- это фаза, когда она входит в выбор частоты. После выбора частот управление возвращается к основному классу BaseStation
и возобновляет генерацию запроса. В то же время, то есть, как только он выйдет из своего критического участка, выбранная частота перейдет в состояние использования на определенный период времени, который будет определяться случайными часами. Таким образом, эта частота будет недоступна для любого другого запроса, который происходит в промежуточный период. Когда время использования частоты истекло, оно просто снова устанавливает свой статус как доступный. Таким образом, часть взаимного исключения для BaseStation
предназначена только для выбора частоты, после ее завершения функциональность BaseStation
и время использования частоты работают параллельно.
Как я до сих пор кодировал: у меня есть три класса BaseStation
, CriticalSection
и UseFrequency
. BaseStation
вызывает функцию в CriticalSection
для выбора частоты, когда частота выбрана, у меня есть функция, которая запускает поток в другом классе для использования частоты, а затем возвращает управление на BaseStation
вскоре после:
UseFrequency freqInUse = new UseFrequency;
freqInUse.start();
return 1;
Но как только поток останавливается, классу CriticalSection
необходимо обновить некоторые переменные, я запутался, как вернуть управление обратно в средний класс. Нужно ли использовать два потока?