释放持有pthread_t的结构对线程本身有什么影响? 我有一个表示线程的结构:
typedef struct car{
int cur_place;
pthread_t car_thread;
}car;
并且我有一个包含这些汽车的数组,经过一段时间我想从内部线程中释放结构,我的意思是:
void * car_thread(void * number){
int num = *(int *)number;
free(maze[num]);
maze[num] = NULL;
pthread_exit(NULL);
}
有可能吗?在释放持有它的pthread后,线程会发生什么?它会运行下一行吗?
提前感谢。
答案 0 :(得分:3)
释放car
仅释放用于存储这些值的内存。线程仍然可能在某处。可以认为pthread_t
只是持有系统用来讨论线程的数字或地址。不是线程本身。
请勿在{{1}}免费提及car
之后的任何内容。
答案 1 :(得分:2)
您刚刚释放了存储线程IS的位置,当您执行pthread_exit(NULL)
时,将释放存储线程属性的数据结构。因此回答你的问题:线程仍然存在。
答案 2 :(得分:0)
在调用pthread_exit()之前线程不会退出,或者在内置信号处理的情况下,已收到退出信号。该线程附加到进程,但不同的线程是隔离的实体,直到您将它们绑定在任何类型的线程组织中。为模糊的措辞道歉,但这是我能描述的最佳方式。
如果您打算在释放数据结构时通知汽车退出,则需要内置信号处理以通知每个线程退出。或者,以某种方式在每个线程中调用pthread_exit()。