場合分けしてみた - Skip Graph の concurrent JOIN を考える - その4

id:kibayos さんの PDF「構造化オーバレイの一貫性保証」 に書かれている Skip Graph の一貫性保証の例を読み解く。
http://live-e.naist.jp/sensor_overlay/3/doc/yoshida.pdf


その3の続き。
Concurrent Join のアルゴリズムをカジュアルにフォーマライズしたい。拠り所が出来れば実装やテストが安心だし。
不変表明は

  • 「双方向リンクリストがどのステップでも一貫性を保持している事」
    • 右からたどるのと逆からたどるのが全く同じということ。
  • 「双方向リンクリストがどのステップでもソートされている事」

としてみた。


表中の列方向が、Join の各ステップ、行方向が可能性のある状態。


詳しく見ていくと 4 つ目のステップ「change Y->X to Y->A」で不変表明を満たせなくなる。
これは

  • 不変表明がきつすぎる
    • 一貫していなくても、検索、Join、Remove に影響がない?
  • この方法・解釈は間違っている

のどちらかだと思う。難しい。

追記

社内で、バージョンニングして dirty な状態は見せないというのはどうか?という意見をもらった。明日考える。