免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: gta

[函数] 多线程使用malloc [复制链接]

论坛徽章:
0
发表于 2010-03-11 12:45 |显示全部楼层
回复 9# happy_fish100


malloc多线程没有问题。自己有锁。和内核无关。
不能在信号处理中用就可以了。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2010-03-11 12:48 |显示全部楼层
回复  ZSMDEV

多线程并发malloc,估计是有问题的。可以写个测试程序试试
happy_fish100 发表于 2010-03-11 12:16



不会
可以设置变量使malloc并发

论坛徽章:
0
发表于 2010-03-11 12:53 |显示全部楼层
这个貌似是实现相关的。。。不过现代的编译器和库应当都是线程安全的

GCC的实现是当你用-lpthread选项时,malloc等等函数会自动成为线程安全的

malloc的实现会带有隐含的malloc_lock()和malloc_unlock()调用。。。



另外malloc不是可重入的,所以不能在信号处理函数中使用。

论坛徽章:
0
发表于 2010-03-11 13:15 |显示全部楼层
建议看一下:
linux 多线程应用中如何编写安全的信号处理函数
http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/

论坛徽章:
0
发表于 2010-03-11 14:27 |显示全部楼层
我的理解是malloc是线程安全的,但是是不可重入的。
如果有信号处理函数调用malloc,可能会引起死锁。

论坛徽章:
0
发表于 2010-03-11 16:00 |显示全部楼层
弱弱的问一句,不可重入的函数到底有个什么特点,有哪些?看到有地方说printf也是不可重入的,为什么?有点不解。。。还有这个信号处理函数调用malloc怎么样会引起死锁?还请大家指点一下啊。:wink:

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2010-03-12 03:10 |显示全部楼层
malloc是不可重入的???
这内核设计的不好吧,,,malloc的 地方多了去了,如果不可能重入,那就是一个大缺陷!
malloc应该自己管理重入问题!
就算你自己写的代码使用互斥量来调用malloc,但是你不能保证库函数或者其它库里调用的malloc也用互斥量而且是和你同一个互斥量来调用malloc阿。。。
所以,从感觉上说,malloc是可重入的,,估计哥们看的资料有点问题。
iamybj 发表于 2010-03-11 11:50


从感觉上说?真搞笑
你设计一个不使用静态数据的malloc看看?

这就好比C++和C的区别。。
奉劝某些信仰C++的人,,苦海无边,回头是岸
iamybj 发表于 2010-03-11 22:28


见过许多批评C++, 而信仰C的人。 但没见过多少是把C学好了的, 除了Linus。
跟unistd一路货色

论坛徽章:
0
发表于 2010-03-12 08:39 |显示全部楼层
malloc和内核没有直接关系。

论坛徽章:
0
发表于 2010-03-12 08:43 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
发表于 2010-03-12 09:43 |显示全部楼层
malloc就应该是可重入的,因为malloc必然是通过系统调用,内存只有一份,不管是多进程还是多线程,对内核来 ...
iamybj 发表于 2010-03-12 08:43



第一,先搞清楚可重入,不可重入的概念,线程安全和线程不安全的概念
其次,请想想,一个进程它的虚拟地址空间就只有一个0-4G,想想跟malloc的关系,如果同时多个malloc的时候,会怎样呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP