test-and-setだとnコンセンサス問題に置いてn=2までしか対応できないのに対しcompare-and-swapだと無限のnに対応できる!さすが百獣の王CASさんやで!
2010-12-20 20:44:44@repeatedly 読んでる限りだと英語のwikipediaがまとまってて良さげです。Java並行本だと時間の見積もりだとか他で見ない情報もあります。 http://en.wikipedia.org/wiki/Test-and-set
2010-12-20 22:16:51test-and-setでできなくてcompare-and-swapにできる事がある!ってのが数学的に証明されたのが僕が3歳の頃。本当にこの世界は怖い。
2010-12-20 22:22:11ABA問題が起こるシチュエーションが今の実装絡めたらないってことなのか?後バスを占有するというのがよく分かってなかったり.
2010-12-20 22:21:51@repeatedly ABA問題は「CASが成功するスレッドは1つだけだ」という前提でコードを組んだ場合に運悪く2つ以上のスレッドで値が一致して事故る現象を言うので、「TASが成功するスレッドは1つだけ」という前提で組むコードとは前提が違います。
2010-12-20 22:29:57@repeatedly cmpxchg8bの情報を眺めるに、成功時にZFが立って失敗時にZFがクリアされるけど、失敗時はついでに目的アドレスの値がEDX:EAXにロードされるようです。
2010-12-20 22:35:49@repeatedly asm volatile("" : : : "memory"); って書いてメモリフェンスとか必要でしょうね。boost::atomicのcasなんて成功時と失敗時に分けてメモリバリアを使い分けれるとか…。
2010-12-20 22:43:06D言語の場合はvolatile statementで囲いつつ,中でcore.atomic.CASとかかなぁ.いやしかしCASが必要になるということはそれ共有状態にあるということでshared修飾されているわけだから,メモリバリアは自動で貼られるはず?
2010-12-20 22:46:33