分散環境で使えそうな Lock-Free linked list を探している

いくつか論文を読んで見た。欲しいのは双方向リンクリスト。

  • Lock-Free Linked Lists Using Compare-and Swap
    • 単方向リンクリスト
  • A pragmatic implementation of non-blocking linked-lists
    • 単方向リンクリスト
    • deleted markd
  • "Two-Handed Emulation: How to build non-blocking implementations of complex data-structures using DCAS"
    • non-blocking doubly linked list
    • DCAS を利用して、link 付け替えと、現在作業中 step 番号を一度に更新。
    • 中途半端な状態は別のスレッドが協調フォロー。
    • グローバルな uid 保持場所を必要とするので p2p では使えなそう
  • "Lock-free deques and doubly linked lists"
    • 双方向に正しく traversal できる。(削除されたノード含んでいても良い)
    • link list が常に consistent
    • 各ノードが deleted mark を保持
    • CAS
    • deleted node の回収に参照カウント


一番最後の "Lock-free deques and doubly linked lists" が要件を満たしているのだが実装が大変そう。

  • 参照カウント。
  • prev/next 参照が複雑になる。deleted mark 見るとか。

など。


ふーむ。これは 2 フェーズコミットで普通にロックした方が良い気がしてきた。しかし 2 フェーズコミットも実装が面倒だよなあ。
と思ったら、global:set_lock(key, Nodes) で左右ロックすれば OK ?。