Пример гонки: два процесса одновременно читают остаток 1 и оба разрешают покупку. Результат зависит от порядка чтения и записи, а товар продаётся дважды.
Можешь привести пример состояния гонки?
Пример гонки: два процесса одновременно читают остаток 1 и оба разрешают покупку. Результат зависит от порядка чтения и записи, а товар продаётся дважды.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Пример гонки: два процесса одновременно читают остаток 1 и оба разрешают покупку. Результат зависит от порядка чтения и записи, а товар продаётся дважды.
Простая проверка если остаток > 0 отдельно от уменьшения не атомарна. Защитой может быть условное обновление UPDATE ... SET stock = stock - 1 WHERE stock > 0 с проверкой числа изменённых строк в нужной транзакции. Также применяют блокировки или оптимистическую версию. Одного локального mutex недостаточно, если несколько экземпляров приложения обращаются к общей базе.