Ptheard会杀死在线程函数中分配的自由动态内存吗?

时间:2010-08-09 18:56:17

标签: c memory-management memory-leaks pthreads

我有一个使用malloc()分配内存的线程函数。我使用pthread_kill杀死线程而不释放动态分配的内存。一旦我调用pthread_kill或者会有泄漏,它会自动释放吗?

4 个答案:

答案 0 :(得分:3)

正如vicatcu所说,会有泄漏。

我绝不会建议使用pthread_kill,除非你绝对必须这样做。相反,您应该创建一个信令机制,让线程知道应该何时完成,然后加入线程。并且线程函数应该偶尔轮询该值,如果它获得终止信号,它应该清理自己的资源并退出。

另一种选择当然是尽量不在线程中分配内存。但我想你并不总是那么奢侈。 : - )

答案 1 :(得分:3)

您在一个线程中分配的内存不属于该线程。它是从同一个全局堆中分配的,所有其他线程都在使用您的程序。所以你必须释放你分配的所有内存,否则你最终会泄漏。

答案 2 :(得分:1)

会有泄漏。 pthreads kill函数如何知道通过malloc分配的变量的名称? C中没有垃圾收集,如果你在某个地方调用malloc,你最好确保你在其他地方免费打电话。

[修改] 也许你应该只设置一个与你的线程相关联的全局标志变量,并让你的线程偶尔轮询该变量,以了解它是否以及何时应该自行终止。

答案 3 :(得分:0)

,假设您没有为您使用的信号安装信号处理程序,并且信号的默认操作是进程终止。

那是因为pthread_kill没有杀死一个线程,它会向线程发送一个信号。如果该信号的操作是终止进程,那么整个进程就不再存在,并且随之而来的是由进程中任何线程分配的任何动态内存。 / p>

没有办法杀死一个帖子。