0

我希望能够启动一个 pthread 并且即使 main() 完成它也会保持活动状态。

我无权访问 main()。

正常的行为是,如果一个线程启动并且没有从 main() 中“join_thread”,它将在 main 完成运行时终止。

在java中,默认是被调用的线程将保持活动状态。只有当所有线程都完成时,该进程才会终止。不需要显式调用 java“join_thread”。

4

2 回答 2

2

你可以main()用 apthread_exit(..)而不是a 来结束你的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 回答