UNIX/C プログラムで緊急終了が必要な場合は、exit (3) 関数を使用し、緊急クリーンアップのために atexit (3) ハンドラをインストールします。このアプローチは、アプリケーションがスレッド化されるまで問題なく機能し、スレッド化された時点で atexit() ハンドラーが予期したとおりに動作しなくなりました。
スレッドが atexit() ハンドラーで既に死んでいる可能性があり、それらのスタックの割り当てが解除されている可能性があるというエラーを試行的に学びました。
atexit() による標準のリンク スレッドの消失に関する引用を見つけられませんでした: スレッドは main() からの復帰後に存在しなくなりますが、それは atexit() の呼び出しの前ですか、それとも後ですか? Linux、FreeBSD、および Mac で実際に行われていることは何ですか?
マルチスレッド プログラムで緊急クリーンアップの適切なパターンはありますか?