スレッドAがスレッドBを作成し、しばらくするとスレッドBが問題でクラッシュしたとします。コントロールが、C言語でスレッドAに戻る可能性はありますか。一種の例外的な処理。
3 に答える
いいえ。「コントロールが戻ってくる」というのはあまり意味がありません。なぜなら、それらはいずれにせよ独立して実行されているからです。通常、スレッド A はスレッド B が終了するのを待つことはありませんが、何かを実行します。そうしないと。
ちなみに、スレッドはもちろん、別のスレッドがまだ実行されているかどうかを確認できます。使用しているスレッド ライブラリまたはシステム関数を確認してください。
ただし、これは「ソフト クラッシュ」と呼ばれる場合にのみ機能します。多くのクラッシュは、プロセス全体を強制終了するハードウェア例外やメモリの破損など、スレッドが悪いことをするだけではありません。そのため、別のスレッドでクラッシュをキャッチしようとすると、かなりの作業が必要になり、メリットがあったとしてもほとんどありません。その時間をクラッシュの修正に費やすほうがよいでしょう。
いいえ。それらは別々の実行スレッドです。スレッドAがスレッドBを作成して開始すると、AとBの両方が独立して実行できます。
もちろん、スレッドBがプロセス全体をクラッシュさせた場合、スレッドAはもう存在しません...
スレッドは他のスレッドを呼び出すことはできず、シグナルを送るだけです。「通常の」関数/メソッド呼び出し/戻りメカニズムはスタックベースであり、各スレッドには独自のスタックがあります (複数のスレッドが異なるスタック自動変数を使用してまったく同じコードを実行することは非常に一般的です)。
スレッドが別のスレッドを呼び出すことができない場合、あるスレッドから別のスレッドへの「戻り」もありません。