カーネル内部のLock-freeというかRCUの話
@syuu1228 カーネルの中ではRCUは良く使われるようですが、どうやって寿命を管理しているんでしょう?参照カウンタじゃ本末転倒だし他のGCがあるわけでもなく…。他のスレッドのプログラムカウンタを見るとかハザードポインタのようにローカルストレージを参照しあうとかですか…?
2011-06-23 07:30:03@syuu1228 GCなんですか…!どういう方式のGCなんでしょうか?まさか全スレッド足止めするようなM&Sじゃないとは思うんですが。
2011-06-23 07:34:00@naota344 書き換えの度にコピーを作るので古いバージョンを見てるスレッドが破綻しないっていう利点はあるんですが今度はいつその古いバージョンを捨てたら良いかわからないんです。他に何人見てるか分からないので自分の用事が終わったら捨てていいとも限らないですし。
2011-06-23 07:38:13@syuu1228 参照カウンタ以外のGCで他スレッドを止めない方法って、ライトバリアを使うとかコピーGCするとか、言語とべったりくっついてそうなイメージだったので、シンプルそうなM&Sを連想したんですが。
2011-06-23 07:39:34@kumagi なんかこのへんとか・・・http://www.atmarkit.co.jp/flinux/rensai/watch2009/watch04a.html
2011-06-23 07:42:00@kumagi Linuxの場合はRCU使用中はプリエンプション禁止、解放側は全CPUで1回以上スケジュールが発生した=クリティカルセクションを抜けたことをビットマップやツリーで確認してから解放です。K○SAKI先生の記事参考になるでしょうか。http://j.mp/ldMCul
2011-06-23 07:43:07@kumagi @naota344 とか。http://fxr.watson.org/fxr/source/Documentation/RCU/?v=linux-2.6
2011-06-23 07:43:22@kumagi @naota344 何か思い出してきた、確か古いオブジェクトを登録しておく方法があって、後で回収処理が走ったときに、全てのCPUが一回以上スケジュールされているかどうか確認する→もうそのオブジェクトを参照していないと保証できる。だったはず
2011-06-23 07:46:01@kumagi @naota344 多分、そうすると正確にいつ要らなくなったのかは把握出来ないけど無視できる単位の時間で検出できて、参照カウンタとかも要らないってことじゃないかにゃー
2011-06-23 07:51:57@kumagi @naota344 最初に読んだ時、クリティカルセクション開始終了の所のAPIの引数が0個でナニコレ??って思った覚えが
2011-06-23 07:53:38