FFORGE//RS
← Маршрут

rust / УРОВЕНЬ 4

Guard, пересёкший await

ОЦЕНКА45 МИН
01

ТЕОРИЯ / ВОСПРОИЗВЕДЕНИЕ

Что нужно восстановить

  • Понимать, как локальные значения через await становятся полями Future
  • Не переносить блокирующий MutexGuard через suspension boundary
  • Сохранять состояние при ошибках проверки и overflow

Send выводится из приостановленного состояния

Многопоточный scheduler может продолжить Future на другом worker. Future является Send, только если Send все значения, живущие через await; `std::sync::MutexGuard` намеренно не Send.

Async mutex не оправдывает длинную критическую секцию

Даже async-aware guard через сетевой I/O или backoff сериализует независимые задачи и усложняет отмену. Если протокол позволяет, завершите await до lock и коммитьте без новой приостановки.

Граница отмены должна быть явной

Admission завершается до изменения inventory. После него одна короткая синхронная секция сначала проверяет всю арифметику, затем атомарно меняет оба счётчика либо ничего не меняет.

КОНТРОЛЬНАЯ ТОЧКА

Executor отклоняет reservation-Future как не-Send. Какие два вывода review сохраняют контракт?

Выберите все подходящие варианты. Ответ засчитывается только при точном совпадении набора.

ISOLATED RUST 1.96
src/lib.rsРЕДАКТИРОВАНИЕ

02 / ОТЛАДКА

Найдите и исправьте дефект

Исправьте `reserve_after_admission` без изменения API: ноль отклоняется до admission, Future остаётся Send, guard не живёт через await, ошибки overflow/poison не меняют inventory, а успех ровно один раз увеличивает reserved и revision.

Инициализация редактора…
ОБЛАЧНЫЙ SANDBOXсеть выключена · 256 МБ · 12 с
2 / 64 KB
ВЫВОД
Runner ждёт отправки кода.