2

atexitマルチスレッドアプリケーションでの使用について疑問があります。

次のシナリオがあるとします

 Thread A calls atexit(handler_a)
 Thread B calls atexit(handler_b)
 main()   calls atexit(handler_main)
 Thread C calls atexit(handler_c)
 ....

すべてのハンドラー関数は単一の一意のスレッドで実行されますか、それとも別々のスレッドで実行されますか?

それらが単一のスレッドで(次々に)実行される場合、そのスレッドがメインスレッドになりますか?

Linuxとg++を使用しています。

4

2 に答える 2

5

riciが言うように、atexitハンドラーはexitを呼び出すスレッドから呼び出されます。スレッドごとのハンドラーが必要な場合は、pthread_key_createデストラクタを使用できます。

于 2012-10-02T16:16:00.117 に答える
0

atexitハンドラーを単一のスレッドから呼び出す必要があるという制約は、標準にはありません。

実際、同時に登録されたハンドラー(どちらの登録も他の登録の前に順序付けられていないため)も同時に実行できると思います。ただし、この標準では、登録が別のハンドラーの前にシーケンスされているハンドラーが、別のハンドラーの後に実行されることが保証されています。

于 2012-09-22T09:41:08.823 に答える