Исходный код вики Оптимистичная блокировка
Версия 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 | Не подходит для операций, которые не являются идемпотентными (например запросы во внешние сервисы). |