【发布时间】:2010-11-27 00:58:51
【问题描述】:
我有一个程序可以在 MacOS 和 Linux 上运行良好,并且可以使用 mingw 交叉编译到 Windows。最近我把程序做成了多线程的。
程序的当前设计在主线程中分配内存并在从属“工作”线程中释放。这在 MacOS 和 Linux 上不是问题,因为 malloc/free 系统是多线程的。
不过,我担心交叉编译。我使用的 mingw 版本是从 MacOS 端口构建的。这是 2004 年以来 G++ 的一个非常古老的版本(版本 3.4.5)。我尝试构建更新版本的尝试没有成功(我想构建一个 64 位版本,但放弃了)。我从http://sourceware.org/pthreads-win32 获得pthreads。
我担心的是 3.4.5 中的 malloc & free 系统不是多线程的。
问题:
我是否应该重写我的程序,以便将要释放的内存块传递回主线程以在那里释放?
我应该尝试升级到更新的 mingw 吗?
除了大量的测试之外,还有什么方法可以发现这些并发问题?这对我来说感觉不太好。
谢谢!
【问题讨论】:
-
所以回想起来,我得出的结论是选项#1 不起作用,因为线程中还有许多其他情况需要调用 malloc() 和 free()。我可以给每个线程它自己的内存分配器,但这是错误的方向。