海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
わろた。わかる。 (ja.reddit経由)
とってもエネルギーの低い安定状態に陥ってしまったら、 結婚なんかできないんじゃないかと思う。
ひとごとだけど。
http://www.namikilab.tuat.ac.jp/~sasada/diary/200501.html#d28
ちょっと気にかかるやりとりがあるのだが、 不明点いろいろなので、とりあえずここにメモ。 あとで調べて書くかも。
ぼくには、コメント欄にある、tas (test-and-set) は「バスを占有」するが、 cas (compare-and-swap) はしないという話が飲み込めない。
事実だったとしたら、それはキャッシュの更新方式 (write-through か write-back かというやつ) に依存しているのであって、tas か cas かという話ではないと思う。
いずれにしても、cas(たぶん tas も)を実行するには、そのキャッシュブロックを占有する 必要があるので、ロックが欲しい人全員がいきなり cas でポーリングしてたら輻輳しまくるのである。 *1
なので、最初は atomic じゃない普通の load 命令でロック変数をポーリングしておいて (これなら、ロック変数が更新されるまでは、各キャッシュ上のコピーが参照されるので、 輻輳は抑えられる)、 いけそうだという段階になって、初めて cas に切り替える。
(はっきりとそう書いてありますね。ちゃんと読んでないのばればれ)
という話なら有名なので知っている。 *2
test and test and set という語は初めてみたのですが、上のような話なんじゃないかと思った ……けど、未調査なので、断定できない。
ちなみに,こんなことを考えている人は何人くらい居るんだろう.ruby といい,やっぱりマイナーなことしかしてないな,俺は.