From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2011-01-25T15:25:34+09:00 Subject: [ruby-dev:43100] Re: pthread_cond を用いたConditionVariable けいじゅ@いしつかです. In [ruby-dev:43093] the message: "[ruby-dev:43093] Re: pthread_cond を 用いたConditionVariable", on Jan/25 03:40(JST) KOSAKI Motohiro writes: >小崎@便乗です >パフォーマンスはさておくとしても、今のCVはCtrl-Cセーフじゃないという >かなり致命的な弱点があるので へー. そんなのあるんですか... とはいえ, 今のC版CVもCtrl-Cで止まりませ んが... >いつかはC実装に直さないといけないという認識でした。すばらしいです。 POSIX CVを直接使うのは不可能かと思って一瞬あきらめかけたんですが, 使え る方法に気が付きました. >今のRubyだとdeadlockするのが正しい挙動のときに assert(deadlockすること) と書く方法がない気がするのですが >この認識はあってますかね? deadlockが検知できれば, 例外が発生するので, それをキャッチすれば良いの では? とはいえ, C版CVはまだdeadlock検知できていませんが... > > 3. その他色々ありそう... > うちは今 broadcastのテストで嵌ってます (???) そうそう. Ruby版CVと隠れたセマンティクスの違いがあって, Ruby版CVでは, waitもbroadcastも待ちの解放が待ちに入った順になりますが, C版ではその順 番が不定になります. ですので, それに依存していると動かないかも... あとは, 遠藤さんの指摘の部分のせいかも知れないですね... >>> 1. deadlockのチェックができていない. thread->vm->sleeper の辺りが怪し >>> いと思ったのですが, うまくいきませんでした. >> >> rb_cv_wait_forever()に以下の3行足したら、deadlock 検知してくれました。 > >わはは。大嘘でした。CVはlock離すのと寝るのとを一息にやるので >false positive うみますね。 なるほど, これが私の方でもうまくいかなかった理由ですね. もうちょっと考 えてみます. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---