3

atexit() で登録された関数は、最後に実行される関数ですか? この時点で他のスレッドがまだ実行されている可能性はありますか?

4

1 に答える 1

4

atexit() で登録された関数は、最後に実行される関数ですか?

atexit() 呼び出しは、メイン スレッドの実行が終了した後、メイン スレッドで実行されます。それ以外は、いかなる保証も行われません。

この時点で他のスレッドがまだ実行されている可能性はありますか?

はい、main() が戻る前に他のスレッドを停止して join() する手順を実行していない場合。一般に、C (または C++) ランタイムはそれを行わないため、すべてのスレッドの明示的で制御されたシャットダウンを実行したいと考えています。 main() がシャットダウン シーケンスの一部として割り当てを解除したリソースにアクセスしようとするため、未定義の動作が呼び出されます (プログラムのシャットダウン中に時折、簡単に再現できないクラッシュが発生することがよくあります)。

于 2016-04-07T22:11:33.863 に答える