Altifigence Academy

19 / 24 · Теория

Сохраняйте учёт транзакций при очистке и сбросе

Отделяйте отмену от выдачи и согласуйте valid с очередями ожидаемых результатов.

Отмена — явное событие проекта

Reset возвращает управление в известное состояние; flush отменяет заданную незавершённую работу. Очистки только данных недостаточно. Если valid остаётся высоким, ноль может стать фиктивной транзакцией. Старые биты данных при нулевом valid безвредны. Очищайте соответствующее состояние владения: full буфера на одно место, count и указатели FIFO либо состояние автомата и valid результата.

Наше синхронное соглашение с одним тактом исключает приём и выдачу на фронте reset с обоих концов и отменяет всю незавершённую работу. Сброс только одного конца, когда другой считает старый valid выдачей, нарушает соглашение. Документируйте область сброса и правило готовности. Новые входы после сброса принадлежат новому интервалу транзакций.

Событиеaccepteddeliveredcanceledoutstanding
Принять A,B,C3003
Выдать A3102
Отменить B,C очисткой3120
Принять D4121
Выдать D4220

При отмене используйте accepted-delivered-canceled=outstanding. Отменяйте каждую невыданную транзакцию ровно один раз. Эталонная очередь также должна удалять отменённую работу и проверять, что устаревший результат не входит в новый интервал.

Внешний запрос памяти может пережить внутренний flush. Различайте поздние ответы идентификатором поколения либо ждите завершения старых запросов перед перезапуском. Слишком раннее повторное использование малого поля поколения может спутать старый ответ с текущим. Наш итоговый проект не имеет внешних задержанных ответов и отменяет только внутренние буферы.

Выборочная очистка может сохранить работу старше ветвления, удалив младшие операции неверного пути. Это требует определённого порядка и правил фиксации. Недостоверная работа не должна обновлять хранилище или участвовать в обходной передаче. Проверяйте reset при пустоте, остановке, заполненности и потенциальных одновременных передачах. Один начальный reset не проверяет отмену незавершённой работы.

Попробуйте сами

Примите пять, выдайте два, затем отмените очисткой оставшиеся три. Затем примите два и выдайте один. Найдите накопленные accepted, delivered, canceled и outstanding.

Прочитать объяснение

Accepted=7, delivered=3, canceled=3, outstanding=1. Учёт: 7-3-3=1. Отменённые элементы не являются успешными выдачами.

Выбор действует в этом браузере. Его можно изменить внизу страницы.