首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

再问多线程中的malloc和free,该怎么解决

2013-11-21 
再问多线程中的malloc和free先大体说一下我的程序,每个线程在一个全局链表中创建一个节点,然后遍历链表找

再问多线程中的malloc和free
先大体说一下我的程序,每个线程在一个全局链表中创建一个节点,然后遍历链表找到该节点,给节点内的数据赋值,在该节点内再创建一个链表(用到malloc)。然后释放掉节点内的链表(用到free)。最后从全局链表中删除掉该节点。这些函数是在DLL中的。
DLL的VC工程设置中use run-time library选的是Multithreaded.
测试程序的VC工程设置use run-time library也是Multithreaded。
 之前我在网上看,malloc和free是线程安全的,所以我在DLL中用到这两个函数的时候并没有加锁,但是多线程测试的时候就出错了:某个地址不能读,某个地址不能写等内存错误。开始以为是程序的问题,找了好久未果。后来在网上看了一篇文章http://blog.csdn.net/biliky/article/details/5305221。 我把所有的malloc和free函数加了锁(critical_section),再测试就好了。  那我现在就不明白了,这个malloc到底是不是线程安全的,或者我哪里设置的不对吗?上面引用的连接中作者提到他的电脑是4核的,作者说可能每个核都同时动态分配内存了。我的电脑是双核的,这个和线程安全有关系吗?
[解决办法]
VC6的话,工程、设置、C/C++、分类:选Code Generation,Use run-time Library:选Multithreaded DLL或者Debug Multithreaded DLL

热点排行