我有一个程序可以在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中的自由系统不是多线程的。
问题:
我应该重写我的程序,以便将要释放的内存块传回主线程以便在那里释放吗?
我应该尝试升级到更近期的mingw吗?
除了大量测试之外,有没有办法找到这些并发问题?这对我来说感觉不太好。
谢谢!
答案 0 :(得分:1)
答案 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