Итак, я придумал эту схему для блокировки узлов при вращении в двоичном дереве, к которому несколько потоков имеют доступ как для чтения, так и для записи одновременно, что включает в себя блокировку четырех узлов за вращение, что кажется ужасно много? Я подумал, что в один прекрасный момент умнее, чем я, придумал способ уменьшить необходимую блокировку, но Google не слишком активен (в любом случае, я, вероятно, использую неправильную терминологию).
Это моя текущая схема, оранжевые и красные узлы либо перемещаются, либо изменяются при вращении и должны быть заблокированы, а зеленые узлы примыкают к любому узлу, на который влияет вращение, но сами по себе они не затрагиваются.
вращение двоичного дерева
Я подумал, что должен быть лучший способ сделать это, у меня есть одна идея - сделать снимок четырех затронутых узлов, повернуть их в моментальном снимке и затем заменить текущие узлы моментальными (если ничего не изменилось, пока я делал повороты) - это позволило бы мне почти освободить блокировку, но я боюсь, что перегрузка памяти могла быть слишком большой, учитывая, что вращение - довольно быстрая операция (переназначение трех указатели)?
Я думаю, что я ищу указатели (без каламбура) о том, как сделать это эффективно.