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

Редактировал(а) Alexandr Fokin 2025/09/20 11:01

Последние авторы

author | version | line-number | content
--- | --- | --- | ---
|  | 1 | (% style="background-color:#ffffff" %)
|  | 2 | |(% style="width:148px" %) |(% style="width:1337px" %)Оптимистичная блокировка, Optimistic lock
|  | 3 | |(% style="width:148px" %)Алгоритм|(% style="width:1337px" %)(((
|  | 4 | 1. Берем элемент (не блокируя явно для других) (фиксируем version/timestamp)
|  | 5 | 1. Производим обработку.
|  | 6 | 1. Атомарно проверяем, что version/timestamp не изменился и сохраняем элемент.
|  | 7 | (иначе:
|  | 8 | ошибка (прерываем операцию)
|  | 9 | или повторная попытка обработки на основании новой версии данных
|  | 10 | или игнорирование, что исходные данные изменились с момента начала обработки
|  | 11 | ).
|  | 12 | )))
|  | 13 | |(% style="width:148px" %) |(% style="width:1337px" %)Compare and swap (CAS)
|  | 14 | |(% style="width:148px" %)Особенности|(% style="width:1337px" %)(((
|  | 15 | * Плохо подходит для ситуации, когда ресурс блокируется часто (плохо работает, приводит к повышенной нагрузке вычислений т.к. постоянно перевыполняется блок обработки). Предполагается, что ресурс не будет изменен за время выполнения операции.
|  | 16 | (В некоторых реализациях используется случайная задержка перед следующей попыткой обработки, чтобы рассинхронизировать конкурирующих обработчиков и уменьшить вычислительную нагрузку).
|  | 17 | * Не подходит для операций, которые не являются идемпотентными (например запросы во внешние сервисы).
|  | 18 | * В некоторых случаях может использовать для управления отсоединенными данными (Предполагая, что данные в основном хранилище либо не будут изменены, либо изменение отсоединенных данных будет отброшено, либо существование механизма слияния изменений основного хранилища и отсоединенного данных).
|  | 19 | )))
|  | 20 | |(% style="width:148px" %) |(% style="width:1337px" %)Optimistic locking and automatic retry
|  | 21 | [[https:~~/~~/enterprisecraftsmanship.com/posts/optimistic-locking-automatic-retry/>>url:https://enterprisecraftsmanship.com/posts/optimistic-locking-automatic-retry/]]
|  | 22 |
|  | 23 | ----
|  | 24 |
|  | 25 | ==== Внутренние ссылки: ====
|  | 26 |
|  | 27 | ====== Дочерние страницы: ======
|  | 28 |
|  | 29 | {{children/}}
|  | 30 |
|  | 31 | ====== Обратные ссылки: ======
|  | 32 |
|  | 33 | {{velocity}}
|  | 34 | #set ($links = $doc.getBacklinks())
|  | 35 | #if ($links.size() > 0)
|  | 36 | #foreach ($docname in $links)
|  | 37 | #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument())
|  | 38 | * [[$escapetool.xml($rdoc.fullName)]]
|  | 39 | #end
|  | 40 | #else
|  | 41 | No back links for this page!
|  | 42 | #end
|  | 43 | {{/velocity}}
|  | 44 |
|  | 45 | ----

## Приложения