From: "U.Nakamura" Date: 2010-04-14T10:09:29+09:00 Subject: [ruby-dev:40980] Re: [Bug #812] Failure: test_priority (TestThread) on mswin32 こんにちは、なかむら(う)です。 In message "[ruby-dev:40977] [Bug #812] Failure: test_priority (TestThread) on mswin32" on Apr.14,2010 00:44:30, wrote: > > 表題の通りですが、priorityの低いスレッドの選択率を下げる機構 > > はpthreadでもwin32でも同じなのに、win32だとまともに機能してい > > ないように見えるのはなぜでしょうか? > > この機構は、native_thread_yield() を呼んだときに極力他のスレッドに > コンテキストスイッチしてくれないと働きません。 > thread_win32.c では native_thread_yield() は Sleep(0) となっていて、 > Sleep(0) は MSDN によると > > > 中断時間として 0ms を指定してこの関数を呼び出すと、現在のスレッドは > > 自らに割り当てられているタイムスライスの残りの部分を放棄します。 > > らしいので、これが本当なら動きそうなものですが、どうなんでしょうね。 もちろん本当なので動きそうなのですが、なんでだろう、というの が未だに謎です。 > Thread#priority, #priority= の rdoc は、高優先度のスレッドがいる限り > 低優先度のスレッドが全く実行されないかのように読めるので、これを修正 > しつつ、プラットフォームによっては無視されるということを書いて、この > チケットはクローズします。 それでいいと思います。 それでは。 -- U.Nakamura