私はpthreadにまったく慣れていないので、正確な違いは何でしょうか。
pthread_exitはスレッドを終了します。したがって、pthread_joinは戻ります。しかし、デタッチはpthread_joinと何が違うのですか?
たとえば、スレッドを作成し、スレッドが終了したとしましょう。後で再作成できるように、スレッドを完全に終了したいとします。何を使用するのが良いですか。 pthread_joinまたはpthread_detach?
したがって、実行の順序は
pthread_exit();
pthread_join(); or pthread_detach();
?
pthread_exit
は、スレッド自体から呼び出され、実行を早期に終了します(そして結果を返します)。
pthread_join
は、別のスレッド(通常はそれを作成したスレッド)から呼び出され、スレッドが終了してその戻り値を取得するのを待ちます。呼び出しを待っているスレッドの前または後に呼び出すことができますpthread_exit
。以前の場合は、終了が発生するのを待ちます。その後の場合は、単に戻り値を取得し、pthread_t
リソースを解放します。
pthread_detach
は、スレッド自体または別のスレッドから呼び出すことができ、スレッドの戻り値またはスレッドの終了を待機する機能が必要ないことを示します。それ以外の場合は、pthread_join
を呼び出すまで、pthread_t
値は有効なままで、リソースを消費します。少なくとも、戻り値を格納し、pthread_t
の1つの可能な値を拘束するためのリソースです。 pthread_detach
を使用している場合、通常は、新しいスレッドが作成されるとすぐに(pthread_create
の直後)、新しいスレッドまたは作成中のスレッドから呼び出します。