pthread を開始できるようにして、main() が完了しても存続させたいと考えています。
main() にアクセスできません。
通常の動作では、スレッドが開始され、main() から "join_thread" を実行しなかった場合、メインの実行が完了すると終了します。
Java では、デフォルトでは、呼び出されたスレッドは存続します。すべてのスレッドが完了した場合にのみ、プロセスは終了します。Java「join_thread」への明示的な呼び出しは必要ありません。
main()
のpthread_exit(..)
代わりに で終わることもできますreturn 0
。この関数呼び出しは戻りません。そうすれば、メインスレッドは終了しますが、プロセスは終了しません。
すべてのスレッドが完了するか、exit(..)
呼び出されると、プロセスは終了します。
関数で遊んでみることができatexit
ます。
static pthread_t thread_ids[128];
static size_t thread_count;
static pthread_mutex_t thread_mutex = PTHREAD_MUTEX_INITIALIZER;
static void join_all_threads()
{
size_t i;
for (i = 0; i < thread_count; i++)
{
pthread_join(&thread_ids[i], NULL);
}
thread_count = 0;
}
コードのどこか:
...
atexit(join_all_threads);
...
スレッドコード:
void *my_thread_fn(void *arg)
{
pthread_mutex_lock(&thread_mutex);
thread_ids[thread_count++] = pthread_self();
pthread_mutex_unlock(&thread_mutex);
...
}
編集:on_exitを追加
あなたがたまたまon_exit
機能を持っているなら、それはより簡単になります:
void my_thrad_join(int code, void *arg)
{
pthread_join((pthread_t)arg);
}
void *my_thread_fn(void *arg)
{
on_exit(my_thread_join, (void*)pthread_self());
}