【问题标题】:what happends to the thread if we free its pointer如果我们释放它的指针,线程会发生什么
【发布时间】:2013-12-11 19:43:13
【问题描述】:

释放保存 pthread_t 的结构对线程本身有什么影响? 我有一个代表线程的结构:

typedef struct car{
int cur_place;
pthread_t car_thread;
}car;

我有一个存放这些汽车的数组,一段时间后我想从线程中释放结构体 inside,我的意思是:

void * car_thread(void * number){
int num = *(int *)number;
    free(maze[num]);
    maze[num] = NULL;
pthread_exit(NULL);
}

有可能吗?在我释放持有它的 pthread 后,线程会发生什么?它会运行下一行吗?

提前致谢。

【问题讨论】:

  • 什么也没发生。不过,请确保您有办法分离线程。
  • 只是你线程的一个句柄,线程什么都没有发生,和做i=0, x=0,anything=0一样,你只是清除一个变量。

标签: c multithreading


【解决方案1】:

释放car 只会释放用于存储这些值的内存。线程可能仍然存在于某个地方。将pthread_t 视为简单地保存系统用来谈论线程的数字或地址。不是线程本身。

只是不要在 car 释放后的任何地方引用它的内存。

【讨论】:

  • 庆幸你没有和我表弟说话。他曾经告诉人们,在他们从手机目录中删除号码之前,他们必须警告他们的朋友,否则电话公司会关闭另一部电话。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-20
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多