Феномен потерянного обновления (англ. lost update) при параллельном выполнении транзакций заключается в том, что при одновременном изменении одного блока данных разными транзакциями теряются все изменения, кроме последнего. ru.ruwiki.ru
Пример: есть две транзакции, которые одновременно изменяют значение поля f2. ru.ruwiki.ru По их завершении значение поля должно увеличиться на 45. ru.ruwiki.ru Но в реальности может возникнуть следующая последовательность действий: ru.ruwiki.ru
- Обе транзакции одновременно читают текущее состояние поля. ru.ruwiki.ru Точная физическая одновременность здесь не обязательна, достаточно, чтобы вторая по порядку операция чтения выполнилась до того, как другая транзакция запишет свой результат. ru.ruwiki.ru
- Обе транзакции вычисляют новое значение поля, прибавляя, соответственно, 20 и 25 к ранее прочитанному значению. ru.ruwiki.ru
- Транзакции пытаются записать результат вычислений обратно в поле f2. ru.ruwiki.ru Поскольку физически одновременно две записи выполнить невозможно, в реальности одна из операций записи будет выполнена раньше, другая позже. ru.ruwiki.ru При этом вторая операция записи перезапишет результат первой. ru.ruwiki.ru
- В результате значение поля f2 по завершении обеих транзакций может увеличиться не на 45, а на 20 или 25, то есть одна из изменяющих данные транзакций «пропадёт». ru.ruwiki.ru
Проблема потерянного обновления возникает в системах с высоким уровнем параллелизма, где несколько потоков или процессов получают доступ к ресурсам. www.baeldung.com