Я пытаюсь закодировать алгоритм 2PL в Java.
Я немного озадачен поведением транзакций во время ожидания.
давайте предположим, что у нас есть транзакция T1 в отметке времени ts1, которая имеет W-блокировку на элементе A, затем прибывает транзакция T2 в отметке времени ts2, чтобы прочитать элемент A (в этом случае она будет ждать, пока T1 не снимет блокировку ).
Теперь давайте рассмотрим, что T2 снова отображается в метке времени t4, но на этот раз он хочет прочитать другой элемент B.
Как это будет действовать в этом случае? так как он уже ожидает другой блокировки на другом элементе.
Будет ли он полностью заблокирован до получения предыдущей блокировки, а затем продолжит исходную последовательность? Если так, то должны ли мы добавить T2 с отметкой времени ts4 в список ожидания, хотя элемент B может свободно использоваться?
Или мы можем продолжить выполнение T2 на B, сохраняя его в списке ожидания на A?