释放线程间的内存

问题描述 投票:5回答:4

跨线程释放内存是一种不好的做法吗?这样,线程将分配内存,并在退出后将指针传递给主线程以释放内存。我觉得答案是肯定的,但我只是想知道。

在我的代码中,这样做的目的是使主线程在释放之前可以对内存进行其他处理。就我而言,有很多变通办法,我完全可以使用。但是,就我而言,让线程将void *返回内存块可以使代码非常方便。

编辑:我知道这样做没有技术上的缺陷。

c pthreads dynamic-memory-allocation
4个回答
9
投票

一个线程将已分配给另一个线程的内存控制权传递给它是没有错的。例如,在生产者/消费者模型中,对于生产者线程而言,为其生产的内存分配内存是非常合理的,然后将对该内存的控制权交给消费者线程以供消费者线程使用和释放。


4
投票

只要对您的数据流模型特别是程序对对象生命周期的要求有意义,这不是“不好的做法”,但这会产生成本。许多现代的分配器都使用线程局部的竞技场,在同一线程中分配和释放对象不会引起同步损失,但是在不同线程中释放对象会导致强制同步或产生其他成本。除非这是一个主要瓶颈,否则我不会更改您的设计,但是考虑到此实现细节,您还可以考虑其他设计,例如让线程将其输出存储在父线程提供的缓冲区的参数中。线程启动功能。


2
投票

所有线程共享一个公共堆。哪个线程分配或释放内存并不重要,只要其他线程在释放时使用该内存即可。


1
投票

动态内存使用附带了您完全控制它的责任。用户有责任明确管理动态分配的对象的生存期,并在对象的预期生存期结束后确保其释放。在不同线程中使用的动态分配的内存块没有错。同一进程中的所有线程共享同一堆区域。唯一需要注意的是,对象生命周期已明确定义并确定范围。

© www.soinside.com 2019 - 2024. All rights reserved.