我想说:
malloc
a pthread_t
用于保存线程上下文
pthread_create
使用用户参数指向pthread_t
结构的指针
换句话说,线程函数可以访问其pthread_t
上下文结构。现在这里是棘手的一点:
pthread如何自行退出并以某种方式释放pthread_t
上下文?即是否可能不涉及父线程? (没有互斥/加入等)。
将此视为“轻量级流程”。
(并且在退出free()
之前,线程不能thread_func
结构。
答案 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);
}