A Non-Blocking HashTable

http://blogs.azulsystems.com/cliff/2007/03/a_nonblocking_h.html
うーむ。これは確かに面白そうだ。

      • -

サンプルコードだけを見ると、俄には信じがたいなー。
こんなんで上手く動くんかー。
put()の実装が見たい。

      • -

ところで、

if( K == key || key.equals(K) )

の書き方は気に入った。

      • -

put()の説明はこれ
http://blogs.azulsystems.com/cliff/2007/04/a_nonblocking_h.html
ソースはこっちだ
http://blogs.azulsystems.com/cliff/2007/04/nonblocking_has.html

      • -

はー。なるほど。
removeの時に、キーを削除しないのか。
説明されていたput()のコードだと、nullのエントリーに2つ以上のスレッドが同じキーをputしようとしたときに、片方のCAS_key()が失敗して次のスロットを探しに行ってしまいそう。その前にもう一度スロットのキーを確認しないと。

      • -

ところで、これを読んで初めてWeakCompareAndSwapの使い方が分かった。