免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cugb_cat
打印 上一主题 下一主题

malloc 的可重入性 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-05-29 19:48 |显示全部楼层
原帖由 feasword 于 2007-5-29 19:45 发表

这里给的链接中关于可重入的一个解决办法就用到了malloc
/* reentrant function (a poor solution) */
char *strtoupper(char *string)
{
        char *buffer;
        int index;

        /* error ...


错了

论坛徽章:
0
2 [报告]
发表于 2007-05-29 23:05 |显示全部楼层
原帖由 cugb_cat 于 2007-5-29 22:47 发表

呵呵,收了先~~
可重入和线程安全这两个概念我还是分的不是太明了。
APUE中说malloc可能被信号中断,从而导致重入性问题,而如果是在多线程环境中,如果一个线程正在执行malloc,而此时os进行了调度,使另外 ...


显然,用一把锁能避免多线程的问题,比如要malloc就上锁。
但是加锁对付可重入,可想而知。
我没有在信号处理函数中使用malloc,很少考虑这个问题。不过确实是个问题呀,我现在也不知道我的系统是不是线程安全的
没看见man有说这个。手册还是1993的。真老。

论坛徽章:
0
3 [报告]
发表于 2007-05-29 23:14 |显示全部楼层
原帖由 cugb_cat 于 2007-5-29 23:09 发表

从man中没找到答案,我只能去看代码了  呵呵~~~
感觉多线程实在是陷阱多多,稍不注意就会掉进去~~


简单就是美呀,不知道你malloc使用的频率和size大小如何?

论坛徽章:
0
4 [报告]
发表于 2007-05-29 23:16 |显示全部楼层
看代码其实暂时还不用,大概就是加锁(因为它不阻塞,所以也无妨吧?)或者尽量用局部变量,但是应该还是要锁的。

论坛徽章:
0
5 [报告]
发表于 2007-05-29 23:22 |显示全部楼层
原帖由 ypxing 于 2007-5-29 23:18 发表


感觉thread safety版本的malloc如果是加锁处理了的,
那么,在一个函数调用malloc的时候,
如果现在发生了信号中断,
而信号处理程序中又调用了malloc
这样会造成死锁吧

不知道怎么搞的



有道理。
还是谁去研究一下怎么实现的吧。或者这个锁可能属于它的时候再去获取不会死锁了?

论坛徽章:
0
6 [报告]
发表于 2007-05-29 23:22 |显示全部楼层
怎么从线程安全就“也就是”到了原子操作?


其实可以这么认为,他的原子的意思就是不被其它线程中断,所以算是

论坛徽章:
0
7 [报告]
发表于 2007-05-29 23:33 |显示全部楼层
原帖由 MMMIX 于 2007-5-29 23:27 发表

线程安全和被不被其他线程中断也扯不上什么关系。


世界上有什么是原子的?
很多系统调用是原子?为什么?有本质区别吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP