web-dev-qa-db-ja.com

pthread_exit、pthread_join、pthread_detachの違い

私はpthreadにまったく慣れていないので、正確な違いは何でしょうか。

pthread_exitはスレッドを終了します。したがって、pthread_joinは戻ります。しかし、デタッチはpthread_joinと何が違うのですか?

たとえば、スレッドを作成し、スレッドが終了したとしましょう。後で再作成できるように、スレッドを完全に終了したいとします。何を使用するのが良いですか。 pthread_joinまたはpthread_detach?

したがって、実行の順序は

pthread_exit();
pthread_join(); or pthread_detach();

12
user3021085

pthread_exitは、スレッド自体から呼び出され、実行を早期に終了します(そして結果を返します)。

pthread_joinは、別のスレッド(通常はそれを作成したスレッド)から呼び出され、スレッドが終了してその戻り値を取得するのを待ちます。呼び出しを待っているスレッドの前または後に呼び出すことができますpthread_exit。以前の場合は、終了が発生するのを待ちます。その後の場合は、単に戻り値を取得し、pthread_tリソースを解放します。

pthread_detachは、スレッド自体または別のスレッドから呼び出すことができ、スレッドの戻り値またはスレッドの終了を待機する機能が必要ないことを示します。それ以外の場合は、pthread_joinを呼び出すまで、pthread_t値は有効なままで、リソースを消費します。少なくとも、戻り値を格納し、pthread_tの1つの可能な値を拘束するためのリソースです。 pthread_detachを使用している場合、通常は、新しいスレッドが作成されるとすぐに(pthread_createの直後)、新しいスレッドまたは作成中のスレッドから呼び出します。