Исходный код вики Оптимистичная блокировка

Версия 1.6 от Alexandr Fokin на 2022/11/14 20:43

Скрыть последних авторов
Alexandr Fokin 1.5 1 ----
Alexandr Fokin 1.4 2
Alexandr Fokin 1.5 3 1. Берем элемент (не блокируя) (фиксируем version/timestamp)
4 1. Производим обработку.
5 1. Атомарно проверяем, что version/timestamp не изменился. (иначе ошибка/повторная обработка/игнорирования, что исходные данные изменились с момента начала обработки)
6 1. Сохраняем элемент.
7
Alexandr Fokin 1.4 8 ----
9
10 Compare and swap (CAS)
Alexandr Fokin 1.5 11
12 ----
13
Alexandr Fokin 1.6 14 Плохо подходит для ситуации, когда ресурс блокируется часто (плохо работает, приводит к повышенной нагрузке вычислений т.к. постоянно перевыполняется блок обработки). Предполагается, что ресурс не будет изменен за время выполнения операции.
15 Не подходит для операций, которые не являются идемпотентными (например запросы во внешние сервисы).