使用pthread_cancel()时内存泄漏

lik*_*eIT 2 c pthreads thread-safety

大家好我对线程有一些疑问,例如我有一些线程1分配一些内存,而anohter线程(让我们假设2)是1使用pthread_cancel()来杀死线程,或者只是使用return正在进行的内存和平的内容它分配了吗?如果线程1没有释放这段内存会泄漏吗?提前感谢任何答案

编辑

只是为了让它更清晰,因为我知道pthread_cancel()杀死线程,但当我杀死它时它的记忆是怎么回事?return如果1是主线程,所有线程将死亡

Ada*_*eld 7

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

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

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

  • 基本上,如果没有取消清理处理程序,取消就不可能使用,除非线程正在执行的任务不涉及任何资源分配。如果线程可能被系统调用阻塞而需要很长时间才能返回(或更糟糕的是,可能永远不会返回),那么避免“phtread_cancel”并不是一个好的解决方案,尽管有一些方法可以通过信号和`EINTR`... (2认同)