0

pthread を開始できるようにして、main() が完了しても存続させたいと考えています。

main() にアクセスできません。

通常の動作では、スレッドが開始され、main() から "join_thread" を実行しなかった場合、メインの実行が完了すると終了します。

Java では、デフォルトでは、呼び出されたスレッドは存続します。すべてのスレッドが完了した場合にのみ、プロセスは終了します。Java「join_thread」への明示的な呼び出しは必要ありません。

4

2 に答える 2

2

main()pthread_exit(..)代わりに で終わることもできますreturn 0。この関数呼び出しは戻りません。そうすれば、メインスレッドは終了しますが、プロセスは終了しません。

すべてのスレッドが完了するか、exit(..)呼び出されると、プロセスは終了します。

于 2013-03-16T09:05:49.170 に答える
0

関数で遊んでみることができ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());
}
于 2013-03-16T12:06:48.697 に答える