16

.NET フレームワークでのスレッドの状態は、このリンクで説明されています。

最近ウェブサイトでこの写真を見て、いくつかの疑問が頭に浮かびました。

ここに画像の説明を入力

  1. OS のスレッド ライフサイクルは、.NET フレームワークのスレッド ライフサイクルと完全には一致していません。.NET フレームワークを使用する OS の状態に一致するリソースを誰かが提供できますか?

  2. .NET フレームワークには、 Blockedという状態はありません。I/O 要求を発行した場合、スレッドの状態はどうなりますか?

  3. Aborted状態の目的は何ですか? Abort()スレッドがメソッドを呼び出すと、スレッドはAbortRequested状態になり、スレッドが中止要求に応答した後、Stopped状態になります。では、 Aborted状態の機能は何ですか?

4

2 に答える 2

6

ロックやミューテックスなどの同期プリミティブの 1 つによってスレッドの実行が中断された場合、スレッドはブロックされます。特定の時点で有用な作業を実行しているスレッドは、定義上、その時点でブロックされません。

このAbortRequested/Stoppedサイクルにより、スレッドは正常なシャットダウンを実行し、取得したリソースを解放し、その他のクリーンアップ タスクを実行する機会が与えられます。

http://www.albahari.com/threading/

于 2012-01-23T03:02:17.763 に答える
3

質問への回答:

  1. このマッピングがあなたが期待しているように役立つとは思えません。私は一度も遭遇したことがなく、それを必要としたこともありません。
  2. デッドロック検出器のようなもの (かなり高度な) を作成しようとしている場合を除き、「ブロックされた」状態は実際には必要ありません。一般的な開発者の観点からすると、OS の「ブロック」状態は一時的なものであり、無視できます。(コードが実行されているように見えますが、OS は非同期応答を受信するまで何もしません。)
  3. Aborted 状態を、スレッド内のすべてのコードに例外ハンドラーを提供する .NET と想像してください。例外がキャッチされてスレッドが終了すると、.NET はそれを Aborted 状態に変換します。そうしないと、スレッドの異常終了と正常終了の区別がつかない場合があります。
于 2012-01-25T18:11:03.737 に答える