複数のワーカースレッドの終了を待つロジックを書いてみた。

   /* 全てのワーカースレッドの終了を待つ */
   pthread_mutex_lock(&m_end);
   while (0 != thread_num) {
      while(NULL == thr_end) {
         pthread_cond_wait(&c_end, &m_end);
      }
      nrc = pthread_join(thr_end, NULL);
      if (0 == nrc) {
         fprintf(stdout, "thread %5d is exited...\n", thr_end);
         --thread_num;
         thr_end = NULL;
      }else{
         fprintf(stdout, "Error pthread_join() return %d\n", nrc);
      }
      pthread_cond_broadcast(&c_end);
   }
   pthread_mutex_unlock(&m_end);
   fprintf(stdout, "ALL thread is exited... thread_num=%d\n", thread_num);