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

rust / УРОВЕНЬ 4

Два корректных перевода, один deadlock

ОЦЕНКА45 МИН
01

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

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

  • Распознавать циклическое ожидание из-за порядка блокировок
  • Проверять одинаковые ресурсы и неверные индексы до захвата lock

Memory safety не исключает deadlock

Mutex защищает от гонок данных, но потоки могут навсегда ждать друг друга, захватывая одинаковые lock в разном порядке. Единый глобальный порядок устраняет цикл ожидания.

Проверяйте до захвата дефицитных ресурсов

Самопереводы, неверные индексы и суммы следует отклонять до lock: так критическая секция короче и один нерекурсивный mutex не захватывается дважды.

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

Потоки одновременно переводят 0→1 и 1→0. Какое правило напрямую устраняет циклическое ожидание?

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

02 / ОТЛАДКА

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

Исправьте `transfer`: отклоняйте неверные операции и захватывайте два account-lock в стабильном порядке, сохраняя заданное направление debit/credit.

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