ささだです. (2011/05/08 20:23), KOSAKI Motohiro wrote: > Ruby VM internal > に詳しい方々に質問です。現在、thread->interrupt_flagはどうやって排他制御されるデザインになっていますでしょうか? 詳しいかどうかは疑問ですが,th->interrupt_flag を作りました. 基本的に,th->interrupt_flag を弄る人は GVL 取ってるので,排他制御出来 てると思ってたんだけど,まずい? GVL 取ってないのは timer_thread だけど,timer_thread が設定する時 に,or を設定しようとして,そこでまずいことが起こる可能性があるのか な.timer_thread_lock ってのも,昔は取っていなかったような(覚えていない). timer_thread の flag は,実は lost してもあんまり問題ない(ちょっとス ケジューリングが遅れるだけ)ってんで現在の仕様にしている(ロックを取らな い)のですが,他が設定したものを reset してしまう可能性がある(具体的に は signal 回りとバッティングする),といのはまずいかもしれませんね.どう しよ. (1) 落としてもまぁ巡り巡って何とかなる系と,(2) 落としちゃいけない系を 分けますかねえ. (1) #define RUBY_VM_SET_TIMER_INTERRUPT(th) ((th)->interrupt_flag |= 0x01) #define RUBY_VM_SET_FINALIZER_INTERRUPT(th) ((th)->interrupt_flag |= 0x04) (2) #define RUBY_VM_SET_INTERRUPT(th) ((th)->interrupt_flag |= 0x02) -- // SASADA Koichi at atdot dot net