не знакомы)) По-моему, верно сделано для апдейта: если при апдейте между транзакциями "вклинится" новый апдейт того же k2, то это корректно обработается - вторая транзакция на рисунке (обновляющая k2), возьмёт справа самый актуальный элемент получается. А вот для делита не понял, что происходит.
Когда во второй транзакции успели замениться k1 и k2 (самый левые) на k3 и k2? Если Вы переместили k1 направо, впритык до курсора, то почему не вышло k2|k3|k1-?
UPD пока писал, кажется, понял)) k1 поменялось с k3, который находится слева от него. Таким образом если между транзакциями вклинится еще одна, удаляющая k1, она нормально обработается. Кажется, здорово придумано)
Всё вы правильно поняли!)) тут просто есть одно условие, запись в эту структуру происходит только одной транзакции и только во время коммита, когда все данные уже известны, какие добавить, какие убавить, какие изменить))) Про удаление, там просто чтобы сократить лишнее К1, которое было удалено, на его место я записываю ближайшее значение к К1-, т.е. К3, а так как потом К3 уже записано раньше, то можно то К3 что справа и К1- убрать, потому что слева уже нет К1 первоначального))
Обсуждают сегодня