Во-первых, я думаю, что это скорее проблема моего дизайна и отсутствия у меня знаний о том, какие термины мне следует искать. На проблему.
Скажем, у меня 3 темы (t1, t2, t3).
Эти потоки имеют доступ к потоку, который реализует семафор (sem) с разрешением 1 и является справедливым (дает FIFO потокам, которые стоят в очереди), и поток, который реализует таймер (timer), который увеличивает int (время) каждый раз 20мс.
Если все 3 потока пришли сюда в своем коде одновременно и ждали, пока таймер увеличит 6 единиц, прежде чем продолжить.
//In a thread t_ class
int timeInitial = timer.getTime();
while((timeInitial+6)>timer.getTime()) {
//Sleeps for 10ms to ensure it doesn't miss the timers 20ms
increments
try {
sleep(10);
}
catch (InterruptedException e) {
}
}
//Thread joins queue for the singular permit
sem.aquire();
//In the sem class
public void acquire() {
try {
semaphore.acquire();
}
catch (InterruptedException e) {
}
}
//In the timer class, timer functionality. Also has get and set method for time
@Override
public void run() {
while(processes > 0) {
try {
sleep(21);
time++;
}
catch (InterruptedException e) {
}
}
}
Я хотел бы, чтобы несколько потоков пытались получить разрешение в одно и то же время по таймеру, что и при попытке в порядке убывания от наименьшего к наибольшему (t1, t2, t3). Где теперь они будут присоединяться к очереди в, казалось бы, случайном порядке.
Обратите внимание, что если, скажем, t2 и t3 уже были поставлены в очередь для разрешения в момент времени = 6, а время t1 пришло в момент времени = 7, оно не будет переходить в очередь, а будет сравниваться только с другими добавлениями в момент времени = 7 перед очередью (t2, t3, t1).
Я не обязан использовать здесь семафор, это только мое лучшее знание инструментов для решения этой проблемы.