前田です。 In message "[ruby-list:6815] Re: Mutex/ConditionVariable/Queue" senda / ic.rdc.ricoh.co.jp <senda / ic.rdc.ricoh.co.jp> wrote: |eval.c の thread_run()をみればわかりますが、 |とりあえず、 | | def signal | @waiters_mutex.synchronize { | t = @waiters.shift | if t then | Thread.critital = TRUE | t.run | Thread.critital = FALSE | } | end | |とすることでその場のschedulingを回避できるようです。 いや、他のスレッドに条件を変更されないためには、ここはスケジューリング イベントを起こさないといけないんです。 mutex(@waiters_mutexでなく、リソースを保護するmutex)が解放されてからでは Mutexのキューに優先度を付けても意味がないですから。 # そういう意味で効率を犠牲にして安全側に倒したと書きました。 -- 前田 修吾