メインスレッド終了時のデタッチされたスレッドの運命
Q: main() 関数が何もせずに終了した場合、デタッチされたスレッドはどうなりますかそれらに参加するための信頼できるプロトコルはありますか?
C 標準はこの状況の結果を残します
A: いいえ、デタッチされたスレッドが実行されている状態で main() が不足することは、未定義の動作として明示的に定義されていません。回答によると、切り離されたスレッドは実行を継続しますが、他のスレッドの変数や静的オブジェクトへのアクセスは回避する必要があります。これは、シグナル ハンドラーで許可されているコードのみが実行できる静的オブジェクトの破棄フェーズ中に、スレッドが予期しない動作を引き起こさないようにするためです。
Q: デタッチされたスレッドは、デタッチされた後に結合できますか?
A: はい、次のような *_at_thread_exit 関数を使用します。 Notice_all_at_thread_exit()。これらの関数を使用すると、他のすべてのコードが実行された後、切り離されたスレッドの実行の最後にシグナリングを発生させることができます。未定義の動作を回避するには、切り離されたスレッドを _at_thread_exit 関数を使用して手動で結合するか、シグナル ハンドラーにとって安全なコードのみを実行する必要があります。
以上がメインスレッドが終了すると、切り離されたスレッドはどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。