2014-12-12 3 views
2

Рассмотрим два потока А и ВЯвляется ли транзакционная блокировка 2 алгоритмом сериализации?

  • A.readset пересекается с B.writeset
  • B.readset НЕ пересекаются с A.writeset
  • A.writeset НЕ пересекаются с B.writeset

Они фиксируют в то же время: A.lock -> A.validation -> B.lock -> B.validation -> (AB устанавливает обновления)

Это не сериализуемо, потому что B может ov erwrite A читает до того, как А совершит?

ответ

1

Это является сериализации, потому что значение записывается в 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) (тот же результат, что и серийное исполнение)
Смежные вопросы