1

.netでスレッドが10秒以上のように長時間ブロックされる可能性はありますか?または、.netまたはWindowsはスレッドを切り替えて、スレッドが確実に実行されるようにしますか?

4

1 に答える 1

2

スレッドがブロック操作を呼び出すと、スレッドは長時間ブロックされる可能性があります。たとえば、イベントの発生を待機する場合です。

  evt.WaitOne();

またはクリティカルセクションにアクセスしようとしています:

  lock( _myLockObject )
  {
     // ...
  }

このような場合、スレッドは制御を譲り、プロセッサは他のスレッドの実行に専念しています。

しかし、おそらく、スレッドが枯渇する可能性があるかどうかを尋ねているのではないでしょうか? 通常の状況では、答えは「いいえ」です。オペレーティング システムは、すべてのスレッドがプロセッサのスライスを取得することを保証します。優先度が非常に高いスレッドがサイクルを繰り返している場合は例外が発生する可能性がありますが、その場合でも、オペレーティング システムが他のスレッドを完全に枯渇させることはありません。

長い間隔 (10 秒など) にわたって進行していないスレッドが表示される場合は、おそらく何か他の問題があります。暗黙的にブロックする(またはデッドロックする)操作を実行している可能性や、作成後に実際に開始されていない可能性があります。

于 2012-10-13T02:33:50.643 に答える