如果我们释放它的指针,线程会发生什么

时间:2013-12-11 19:43:13

标签: c multithreading

释放持有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后,线程会发生什么?它会运行下一行吗?

提前感谢。

3 个答案:

答案 0 :(得分:3)

释放car仅释放用于存储这些值的内存。线程仍然可能在某处。可以认为pthread_t只是持有系统用来讨论线程的数字或地址。不是线程本身。

请勿在{{1​​}}免费提及car之后的任何内容。

答案 1 :(得分:2)

您刚刚释放了存储线程IS的位置,当您执行pthread_exit(NULL)时,将释放存储线程属性的数据结构。因此回答你的问题:线程仍然存在。

答案 2 :(得分:0)

在调用pthread_exit()之前线程不会退出,或者在内置信号处理的情况下,已收到退出信号。该线程附加到进程,但不同的线程是隔离的实体,直到您将它们绑定在任何类型的线程组织中。为模糊的措辞道歉,但这是我能描述的最佳方式。

如果您打算在释放数据结构时通知汽车退出,则需要内置信号处理以通知每个线程退出。或者,以某种方式在每个线程中调用pthread_exit()。