Я изучаю транзакции и контроль параллелизма в СУБД. Насколько мне известно, если два действия работают с одними и теми же данными, могут возникнуть конфликты со следующими возможностями.
- Чтение-запись
- Запись-чтение
- Запись-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?