2016-05-24 3 views
0

マルチスレッド環境では、スレッドは、の非同期取り消しまたはの遅延取り消しのいずれかの方法で取り消すことができます。 マルチスレッドの2レベルモデルでは、ユーザースレッドライブラリがスレッドスケジューリングを担当しているリファレンステキストを読んでいるので、オペレーティングシステムでスレッドキャンセルを担当しているのはですか?オペレーティングシステムでは、スレッドのキャンセルを担当するのは誰ですか?

また、スレッドライブラリですか?

これはライブラリが非常にうまくいくので、私には非常に明るいアイデアのようには聞こえません。これは私にとって大きなデザイン上の欠陥のようです。 (あなたはディスク全体を拭くことができない糸で終わるかもしれません!)

OS自体であってもかまいませんか?

さらに、OSはスレッド(例えば多対一モデル)を意識していないかもしれないので、そのようなスレッドを認識できなくなるでしょう。

とにかく、啓発は大歓迎です!

答えて

1

答えはスレッドの実装方法によって異なります。あなたが示唆するように、スレッドがユーザライブラリを介して作成されている場合、プロセスを強制終了するとスレッドが終了します。オペレーティングシステムに応じて、ライブラリはスレッドのクリーンアップ(突然の死ではなく)を実装することができます。

スレッドがOSカーネルに実装されている場合、オペレーティングシステムはスレッド終了を処理する必要があります。

+0

これを正しく取得していれば、それらを作成したエンティティによってスレッドがキャンセルされますか? –

+1

それはそれについてです。 – user3344003

0

「ハードディスクを消去するスレッド」は問題ありません。ユーザーモードのスレッドは、メインスレッドと同じくらい機能します。さらに、OSは通常、内部の詳細を気にせずにユーザープロセス全体を終了させることができるため、これらの詳細にユーザーモードのスレッドが関係する場合は無関係です。

もちろん、OSがプロセス内のスレッドの責任を負っている場合、プロセスを削除する前にそれらのスレッドを停止する必要があります。 OSは、コードが停止したプロセスのアドレス空間で終了するので、明らかにこれらのスレッドをスケジュールすることはできません。

関連する問題