- - PR -
ThreadのPriorityについて
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-04-18 21:45
お世話になります。ThreadのPriorityについて質問させていただきます。
今Priorityが「Normal」のThread-AからThread-Bを生成し、Thread-BのPriorityを「Highest」に設定した上Thread-BをStartさせます。その後、AutoResetEventのWaitOne()にて待ち状態に入ります。 事情により、Thread-Bの処理中にAutoResetEventをSetすることになりますが、Thread-BのPriorityが高いので、ThreadーBが終了するまでにThread-Aが動き出さないと期待しているが、実はThread-Aはすぐに動き出してるみたい。 やはり、既にStartしたThreadに対してPriorityが関係ないのでしょうか? それとも、他にも回避する方法がありますか? 以上、宜しくお願い致します。 | ||||
|
投稿日時: 2006-04-18 23:41
こんばんは。
プライオリティの使用(OS側の解釈)のされ方はOS依存です。 9x系とXPでは全く違った挙動をする可能性があります。 どのスレッドについて言及されているかがはっきりしないのですが、 (.Net?)のスレッドにいたってはCLR上で実装される論理スレッドなので、 OSのスレッドと一対一対応でさえないです。 その場合CLRの実装によってもまた変わります。 同期オブジェクトなどによる待ち合わせを行った方がよいと思われます。 | ||||
|
投稿日時: 2006-04-18 23:51
昔の Java VM によくあったグリーンスレッドみたいですね。動作プラットフォームが少ない CLR なら簡単にネイティブスレッド対応できるように思いますが・・・。そうなってないあたりも .NET アプリケーションが遅い原因のひとつなのかもしれませんね。 | ||||
|
投稿日時: 2006-04-19 00:06
グリーンスレッドとはまたちょっと違うのでは? OSのスレッドと一対一対応でさえないというのは、 マネージスレッドがOSのスレッドと固定的に 対応しているわけではないという意味だと思います。 まあ、仕様上はどんな実装でもありな気はしますし、 実際のとこどうなのかはぜんぜん詳しくないので分かりませんが… | ||||
|
投稿日時: 2006-04-19 01:03
なちゃさんが仰っているような意味です。 OSのスレッドとCLRのスレッドが対応しているようないかなる 仮定もおくことは不適当であるという話が http://www.microsoft.com/japan/msdn/net/books/debug 上記の本にあり、一対一対応を実装としては保証しないので、 その前提にたったようなコードはいけませんよ、というレベルの話です。 #実際問題、現時点では、一対一で対応していそうですが・・・。 | ||||
|
投稿日時: 2006-04-19 08:58
( ´_ゝ`)
| ||||
|
投稿日時: 2006-04-19 12:29
という期待を裏付ける規定はありません。 既にコメントがついているように、スレッドの同期処理は同期オブジェクトを使って実装しましょう。 | ||||
|
投稿日時: 2006-05-15 17:54
お世話になっております。大分遅いレスになってしまいましたが、結局AutoResetEventにて、この問題を解決しました。いろいろ助言を頂き、ありがとうございます。
ところで、新たに問題が表れたのですが、Thread.Startで起したThreadとBeginInvokeで起したThreadを両方使っていますが、このように交え使う場合、何か不都合が生じるでしょうか?また、何れのタイプのThreadも実行している間に止まったような感じがするので、Thread自体止まる要因として何が考えられるでしょうか?例えば、ガベジコレクションが動作するとうまく行かないとか? 宜しくお願い致します。 |
1|2|3
次のページへ»