ささだです.

(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