だから、私は、複数のスレッドが同時に読み取りと書き込みの両方のアクセス権を持つバイナリツリーでローテーションするときにノードをロックするためのこのスキームを思いつきました。これには、ローテーションごとに4つのノードをロックすることが含まれますが、これは非常に多いようです。必要なロックを減らす方法を思いついたので、ある方法を賢く考えましたが、グーグルはあまり現れませんでした(とにかく間違った用語を使用している可能性があります)。
これは私の現在のスキームです。オレンジと赤のノードは回転によって移動または変更されるため、ロックする必要があります。緑のノードは、回転の影響を受けるがそれ自体の影響を受けないノードに隣接しています。
これを行うにはもっと良い方法が必要だと思いました。影響を受ける4つのノードのスナップショットを取り、スナップショット内でそれらをローテーションしてから、現在のノードをスナップショットのノードに置き換えるというアイデアがあります(ローテーションを行っていました)-これにより、ほぼロックフリーになりますが、ローテーションがかなり迅速な操作(3つのポインターの再割り当て)であることを考えると、メモリのオーバーヘッドが非常に大きくなる可能性がありますか?
これを効率的に行う方法についての指針(しゃれなし)を探していると思います。