Как избежать голода со слабыми семафорами в 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, но это вызывает занятое ожидание. Как избежать этого без сильных семафоров и без занятого ожидания?