0

このトピックについては以前にも質問がありましたが、pthread_join() の使用法についてはまだよくわかりません。

メインスレッドに参加せずにスレッドが存在する場合、リソースがクリーンアップされないことをどこかで読みました。私たちが話しているリソースは何ですか?これらのリソースが呼び出しスレッドのスタックに存在する場合、呼び出しスレッドが存在するときにそれらはクリアされませんか? pthread_join() は、ヒープに存在するリソースをクリーンアップするのに役立つと思いますか? また、pthread_exit() を使用する利点は何ですか?

4

1 に答える 1

1

スレッド関数が戻ると、スレッドは終了します。スレッド関数が他のヘルパー関数を呼び出す場合、スレッド関数 -> helper1 -> helper2 -> helper3 のようなコール スタックがある可能性があります。helper3 がスレッドを終了するという結論に達したら、各関数に戻り、各呼び出し元に終了の必要性を検出させることができます。または helper3 を呼び出すだけpthread_exitです。

スレッドは、実行するコードだけでなく、ハンドル、優先度、戻り値などの OS 管理情報でもあります。この情報は、スレッドへの最後の参照が削除されるまでメモリに保持する必要があります。pthread_joinOS がスレッドを解放できるように、この参照を解放します。

Linux では、終了したスレッド/プロセスは、閉じられるのを待っている「ゾンビ状態」になります。

于 2014-06-20T13:18:35.297 に答える