マルチスレッドpthread_join()の2つの役割

835 ワード

pthread_join()関数のプロトタイプ:
int pthread_join(pthread_t thread, void **retval);
args:
    pthread_t thread:接続されたスレッドのスレッド番号
void**retval:接続されたスレッドの戻りコードを指すポインタ
return:
スレッド接続のステータス、0は成功、0は失敗
pthread_を呼び出すとjoin()の場合、呼び出されたスレッドが終了するまで、現在のスレッドはブロックされます.pthread_join()関数が返されると、呼び出されたスレッドは本当の意味での終了となり、呼び出されたスレッドが非分離である場合、メモリ領域も解放されます.ここで3つ注意しなければならないことがあります.
  • が解放されたメモリ領域はシステム領域にすぎません.malloc()が割り当てた領域など、プログラムが割り当てた領域を手動でクリアする必要があります.
  • スレッドは、1つのスレッドにのみ接続できます.
  • 接続されているスレッドは非分離でなければなりません.そうしないと、接続にエラーが発生します.

  • pthread_がわかりますjoin()には2つの役割があります.
  • 他のスレッドの終了を待つために使用される:pthread_が呼び出されるとjoin()の場合、呼び出されたスレッドが終了するまで、現在のスレッドはブロックされます.
  • スレッドのリソースを回収します.スレッドが非分離で(デフォルトで作成されたスレッドが非分離である場合)、pthread_が使用されていない場合join()の場合、スレッドが終了するとメモリ領域が解放されず、スレッドが「ゾンビスレッド」になります.