Можно ли добавить эксклюзивную блокировку после общей блокировки - PullRequest
0 голосов
/ 13 октября 2019

Я изучаю транзакции и контроль параллелизма в СУБД. Насколько мне известно, если два действия работают с одними и теми же данными, могут возникнуть конфликты со следующими возможностями.

  1. Чтение-запись
  2. Запись-чтение
  3. Запись-Write

Чтобы избежать конфликтов, существуют механизмы, которым необходимо следовать. Я узнал о Строгом двухфазном блокировании (строгом 2PL) методе, который,

  • Добавляет S-блокировку перед чтением и X-блокировку перед записью
  • Снимает все блокировки послеТранзакция завершена.
  • Если для объекта добавлена ​​блокировка X, объект не может получить блокировку S / X.

Приведенные выше правила иногда вызывают взаимоблокировки и для обнаружения тупика мы можем использовать Wait-For-Graph, где мы можем определить цикл тупика.

Проблема: Я учился рисовать Wait-For-Graph с помощьюнекоторых онлайн-учебников. В некоторых местах я путаюсь с правилами Строгого 2PL . Чтобы сделать это более понятным, в Youtube Tutorial здесь (я добавил соответствующий скриншот с вопросом) говорится, что T2 должен ждать T3, так как T3 имеет S (C), а T2 имеет X (C).

Фактическая проблема в том, что нет никаких правил, не может быть X Lock после S Lock. Тогда почему Т2 должен ждать Т3?

enter image description here

...