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