pthread可以自行清理吗?

jld*_*ont 9 linux pthreads

我们说我:

  • malloca pthread_t用于保存线程上下文

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

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

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

把它想象成一个"轻量级过程".

(并且free()在退出之前没有线程不能结构thread_func.

Mat*_*ner 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);
}
Run Code Online (Sandbox Code Playgroud)