pthread可以自行清理吗?

时间:2009-11-06 15:47:00

标签: linux pthreads

我想说:

  • malloc a pthread_t用于保存线程上下文

  • pthread_create使用用户参数指向pthread_t结构的指针

换句话说,线程函数可以访问其pthread_t上下文结构。现在这里是棘手的一点:

pthread如何自行退出并以某种方式释放pthread_t上下文?即是否可能涉及父线程? (没有互斥/加入等)。

将此视为“轻量级流程”。

(并且在退出free()之前,线程不能thread_func结构。

1 个答案:

答案 0 :(得分:12)

创建线程时收到的pthread_t只是它的ID,用于从其他线程引用该线程。

要在线程终止时自动释放线程上下文,您应该使用pthread_detach()

将其从父线程中分离出来

如果您将指针传递给从初始pthread_t返回的pthread_create(),则可以在新线程的启动例程中立即free()。如果您需要再次参考当前主题的pthread_t值,请致电pthread_self()。然而,在父线程中在堆栈上分配pthread_t会更容易,而根本不需要将它传递给子线程(或者更传递更有用的东西)。

void *child_routine(void *arg)
{
    pthread_t thread = pthread_self();
}

void parent()
{
    pthread_t thread;
    pthread_create(&thread, NULL, child_routine, NULL);
    pthread_detach(thread);
}