我希望能够启动一个 pthread 并且即使 main() 完成它也会保持活动状态。
我无权访问 main()。
正常的行为是,如果一个线程启动并且没有从 main() 中“join_thread”,它将在 main 完成运行时终止。
在java中,默认是被调用的线程将保持活动状态。只有当所有线程都完成时,该进程才会终止。不需要显式调用 java“join_thread”。
你可以main()
用 apthread_exit(..)
而不是a 来结束你的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());
}