大家好我对线程有一些疑问,例如我有一些线程1
分配了一些内存,而anohter线程(让我们假设2
)正在查杀线程{{1}使用pthread_cancel()或仅使用1
正在进行的内存是否已分配?如果线程return
没有释放这段内存,那么会泄漏吗?提前感谢任何答案
只是为了让它更清晰,正如我所知1
杀死线程,但当我杀死它时它的记忆是怎么回事?在pthread_cancel()
的情况下,如果return
是主线程
答案 0 :(得分:7)
是的,在这种情况下它会泄漏内存。 C没有任何垃圾收集 - 如果你分配内存并且无法释放它,它将被泄露,简单明了。
如果您想避免泄漏内存,请不要致电pthread_cancel
。通过设置一个标志让他们退出来让你的线程正常退出,然后当他们检测到该标志被设置时,他们可以通过从他们的线程程序返回或通过调用pthread_exit
来释放他们的内存并自杀。
或者,您可以通过调用pthread_cleanup_push
来设置线程清理处理程序,当线程退出或通过调用pthread_cancel
取消时,将调用它。您可以使用处理程序函数来释放任何未完成的已分配内存。
答案 1 :(得分:2)
首先是否立即取消取决于取消状态。 请检查“pthread_setcancelstate”和“pthread_setcanceltype”。 在取消线程之后有一个处理程序也很重要。在处理程序中必须释放所有资源,如锁和内存,它与return.So,是的,如果实现不是,则有可能泄漏对。 我建议在使用它之前先查看方法或函数的实现。 希望这会有所帮助。