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

时间:2010-11-27 00:58:51

标签: pthreads mingw mingw32

我有一个程序可以在MacOS和Linux上正常运行,并通过mingw交叉编译到Windows。最近我使程序多线程。

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

但是,我很担心交叉编译。我正在使用的mingw版本是从MacOS端口构建的。从2004年开始,这是一个非常古老的G ++版本(版本3.4.5)。我试图构建一个更新的版本(我想建立一个64位版本,但放弃了)我没有成功。我从http://sourceware.org/pthreads-win32得到了pthreads。

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

问题:

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

  2. 我应该尝试升级到更近期的mingw吗?

  3. 除了大量测试之外,有没有办法找到这些并发问题?这对我来说感觉不太好。

  4. 谢谢!

2 个答案:

答案 0 :(得分:1)

  1. 我会避免这种情况。听起来你正试图躲避主要问题。
  2. 是的,无论如何这都是个好主意......
  3. 检测与内存分配/释放相关的并发问题的一种方法是内存泄漏检测器。我不确定valgrind是否适用于cygwin。

答案 1 :(得分:1)

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

默认情况下,mingw32将与msvcrt.dll链接,这是一个多线程dll。见[1]。 [2]是Microsoft提供的单线程库,但它仅适用于静态链接。

PS:你提到你是交叉编译的,但你好像是在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