Я реализовал 5-этапный симулятор конвейера команд процессора в Java с использованием многопоточности.Управление потоками Java в симуляторе конвейера команд процессора
Каждый этап - это поток, который выполняет в основном ниже 3 функций, также есть очередь (емкости 1) между каждыми двумя этапами.
- Получать с предыдущего этапа.
- Процесс выполняет свою основную ответственность.
- Перейти к следующей стадии.
@Override public void run() { while (!(latchQueue.isEmpty())) { fetch(); process(); forward(); } }
Моделирование отлично работает. Вот где я застрял, я хочу, чтобы смоделировать только определенное количество тактовых циклов. поэтому симулятор должен остановиться/приостановить, как только достигнет указанного количества циклов.
На данный момент я запустил все 5 потоков и давал им возможность имитировать обработку всех инструкций, а не ограничивать его циклами синхронизации.
Как это сделать? мне нужно приостановить поток, если указанные тактовые циклы уже достигнуты? Если да, то как я могу изящно обрабатывать приостановление/остановку потоков? Пожалуйста, помогите мне в выборе наилучшего подхода. Заранее спасибо
Является ли 'latchQueue' очередью между этой стадией и следующей? Вы должны показать больше кода, чтобы понять. Если 'latchQueue' временно становится пустым, не будет ли поток неправильно завершен? То есть, если второй этап обрабатывает все, отправляемые ему, не будет ли условие 'while' становиться ложным, что приведет к завершению метода run? – BeeOnRope
Я бы просто изменил условие цикла на «true» и использовал явный объект «stop» для завершения очереди (тогда как пустой мне кажется неправильным). Тогда вы можете просто позволить очереди голодать, чтобы приостановить ее. – Durandal