Как избежать голода со слабыми семафорами в Java

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

Thread1:
while(true){
  Sem1.acquire();
  //do something
  Sem2.release();
}

Thread2:
while(true){
  sem2.acquire();
  //do something
  sem1.release();
}

GUI поток:

START BUTTON → 
 if(paused){
   sem1.acquire();
   paused = false;
 }

PAUSE BUTTON → 
 if(!paused){
   sem1.release();
   paused = true;
 }

В этом случае семафор sem1.acquire(); может быть заперт в голодной смерти. Я попытался использовать флаг, приостановленный внутри Thread1, но это вызывает занятое ожидание. Как избежать этого без сильных семафоров и без занятого ожидания?

0 ответов

Другие вопросы по тегам