使用pthread_cancel()时内存泄漏

时间:2011-05-24 22:39:15

标签: c thread-safety pthreads

大家好我对线程有一些疑问,例如我有一些线程1分配了一些内存,而anohter线程(让我们假设2)正在查杀线程{{1}使用pthread_cancel()或仅使用1正在进行的内存是否已分配?如果线程return没有释放这段内存,那么会泄漏吗?提前感谢任何答案

编辑

只是为了让它更清晰,正如我所知1杀死线程,但当我杀死它时它的记忆是怎么回事?在pthread_cancel()的情况下,如果return是主线​​程

,则所有线程都将死亡

2 个答案:

答案 0 :(得分:7)

是的,在这种情况下它会泄漏内存。 C没有任何垃圾收集 - 如果你分配内存并且无法释放它,它将被泄露,简单明了。

如果您想避免泄漏内存,请不要致电pthread_cancel。通过设置一个标志让他们退出来让你的线程正常退出,然后当他们检测到该标志被设置时,他们可以通过从他们的线程程序返回或通过调用pthread_exit来释放他们的内存并自杀。

或者,您可以通过调用pthread_cleanup_push来设置线程清理处理程序,当线程退出或通过调用pthread_cancel取消时,将调用它。您可以使用处理程序函数来释放任何未完成的已分配内存。

答案 1 :(得分:2)

首先是否立即取消取决于取消状态。 请检查“pthread_setcancelstate”和“pthread_setcanceltype”。 在取消线程之后有一个处理程序也很重要。在处理程序中必须释放所有资源,如锁和内存,它与return.So,是的,如果实现不是,则有可能泄漏对。 我建议在使用它之前先查看方法或函数的实现。 希望这会有所帮助。