我希望能够开始一个pthread并且它将保持活力 即使main()已完成。
我无法访问main()。
正常的行为是,如果一个线程被启动并且没有来自main()的“join_thread”,它将在main完成运行时终止。
在java中,默认情况下,被调用的线程将保持活动状态。只有当所有线程都完成后,进程才会终止。没有显式调用java“join_thread”是必需的。答案 0 :(得分:2)
您可以使用pthread_exit(..)
而不是main()
结束return 0
。此函数调用不返回。这样,您的主线程将退出,但您的过程不会完成。
当所有线程完成或调用exit(..)
时,该过程将结束。
答案 1 :(得分: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());
}