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

Версия 1.12 от Alexandr Fokin на 2023/08/24 13:12

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