Это является сериализации, потому что значение записывается в writeset транзакцией зависит от значения кэшируются из readset, которая была подтверждена в ходе проверки. Переписывание чтения A с помощью B не влияет на кешированные значения A-readset, на которых основаны записи A. Значения, записанные в writeet транзакции A, являются точно такими же значениями, которые были бы написаны, если транзакция A завершилась до начала транзакции B, поэтому она сериализуема.
ПРИМЕР
Мы имеем транзакционную память состоит из 3-х переменных X, Y, Z = X1, Y1, Z1
Транзакция А читает X и записывает Y со значением, которое зависит от X (Х + Р) Транзакция B читает Z и записывает X со значением, которое зависит от Z (Z + Q)
сериализованном ИСПОЛНЕНИЯ
- Сделка A: блокирует Y, проверяет X = X1.
- Сделка A: устанавливает Y = X1 + P и фиксирует.
- Сделка B: блокировка X, проверяет Z = Z1.
- Транзакция B: множества Х = Z1 + Q и совершает
- Конечный результат: (X, Y, Z) = (Z1 + Q, X1 + P, Z 1)
INTERLEAVED ИСПОЛНЕНИЯ
- Сделка A: блокирует Y, проверяет X = X1.
- Сделка B: блокировка X, проверяет Z = Z1.
- Транзакция B: множества X = Z1 + Q и совершает (пишет readset X A перед совершает)
- Транзакция A: устанавливает Y = X1 + P и совершает (использует кэшированные значение X не последнее значение)
- Конечный результат: (X, Y, Z) = (Z1 + Q, X1 + P, Z1) (тот же результат, что и серийное исполнение)