跨线程释放内存是不好的做法?这样一个线程分配内存,并在退出后,将指针传递给主线程以释放内存。我觉得答案是肯定的,但我只是想知道。
我的代码中的目的是让主线程在释放之前可以对内存执行其他一些操作。在我的情况下,有很多变通办法,我使用它完全没问题。但是,在我的情况下,让一个线程返回void *到一块内存可以使代码非常方便。
编辑:我知道这样做没有技术上的错误。答案 0 :(得分:8)
线程传递对已分配给另一个线程的内存的控制并没有错。例如,在生产者/消费者模型中,生产者线程为其生成的任何内容分配内存是非常合理的,然后将该内存的控制权交给消费者线程以供消费者线程使用和释放。
答案 1 :(得分:4)
只要它对您的数据流模型有意义,特别是您的程序对对象生命周期的要求,这不是“不好的做法”,但它可能会产生成本。许多现代分配器使用线程本地竞技场,其中在同一线程中分配和释放对象不会导致同步损失,但是在不同的线程中释放它会强制同步或产生其他成本。我不会因为这个原因改变你的设计,除非它是一个主要的瓶颈,但是考虑到这个实现细节,你也可以考虑其他设计,例如让线程将其输出存储在由参数中的父线程提供的缓冲区中。线程启动功能。
答案 2 :(得分:2)
所有线程共享一个公共堆。无论哪个线程分配或释放内存都无关紧要,只要其他线程在释放时使用内存即可完成。
答案 3 :(得分:1)
动态内存使用有责任让您完全控制它,用户有责任显式管理动态分配对象的生命周期,并确保在对象的预期生命周期结束后重新分配。在不同线程中使用的动态分配的内存块没有任何问题。同一进程中的所有线程共享相同的堆区域。人们唯一需要注意的是对象的生命周期明确定义和范围。