EMZETT.
Увійти

Стани гонитви та TOCTOU: коли таймінг стає вразливістю

Коротко: Стан гонитви виникає, коли результат залежить від випадкового таймінгу паралельних процесів; за «перевірив — використав» (TOCTOU) стан може змінитися між кроками, наприклад із купонами, переказами чи файлами.

Докладніше: Коли два запити читають і змінюють одні й ті самі дані одночасно, результат може стати хибним. Це помилка паралелізму і водночас вразливість, якщо вона підриває правила (купон використано двічі, подвійна виплата).

Подробиці

Приклад: використання купона

Запит A: читає купон (не використаний)   Запит B: читає купон (не використаний)
Запит A: позначає як використаний        Запит B: позначає як використаний

Обидва проходять успішно. Рішення: атомарні операції, блокування й транзакції бази даних.

Див. також: транзакції БД і ACID, м’ютекс, взаємне блокування, обмеження частоти