代码之家  ›  专栏  ›  技术社区  ›  vy32

我可以在主线程中分配()而在另一个线程中释放()吗?

  •  0
  • vy32  · 技术社区  · 14 年前

    我有一个在MacOS和Linux上运行良好的程序,可以用mingw交叉编译到Windows。最近我做了多线程程序。

    程序的当前设计在主线程中分配了内存,在从“工作”线程中释放了内存。这在MacOS和Linux上不是问题,因为malloc/free系统是多线程的。

    不过,我担心的是交叉编译。我使用的mingw版本是从MacOS端口构建的。这是2004年的一个相当古老的G++(3.4.5版)。我尝试构建一个更新的版本时失败了(我想构建一个64位版本,但是放弃了)。我正在从 http://sourceware.org/pthreads-win32 .

    我担心的是,3.4.5中的malloc&free系统不是多线程的。

    问题:

    1. 我是否应该重写程序,以便将要释放的内存块传递回要在那里释放的主线程?

    2. 我应该试着升级到一个新的名字吗?

    3. 除了大量的测试之外,还有什么方法可以找到这些并发问题吗?对我来说感觉不太好。

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  1
  •   Ángel    14 年前

    为什么说malloc&free不是多线程的?

    默认情况下,mingw32将与msvcrt.dll(多线程dll)链接。见[1]。在那里 [2]Microsoft提供的单线程库,但它只能用于静态链接。

    注:你提到你在交叉编译,但你似乎是在windows中编译windows程序。在这种情况下,为什么不从www.mingw.org下载二进制文件呢?(不过,在他们的下载中找到所需的文件是件痛苦的事)

    1个- http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=VS.71%29.aspx

    2-见[1]。在Visual Studio 2005中删除http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=VS.80%29.aspx

        2
  •  1
  •   Reinderien    14 年前
    1. 我会避免的。听起来你是想回避主要问题。
    2. 是的,无论如何这都是个好主意。。。
    3. 检测与内存分配/释放相关的并发问题的一种方法是内存泄漏检测器。我不确定瓦尔格林是否对辛温有效。