免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4005 | 回复: 6
打印 上一主题 下一主题

[函数] malloc, free, 以及文件IO 是不可重入的? lxy 请进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-11 09:44 |只看该作者 |倒序浏览
看了lxy朋友发的 function.doc

里面提到不可重入的函数包括:

"函数体内调用了malloc()或者free()函数;
函数体内调用了其他标准I/O函数。"

我有疑问如下:

1. 这篇文档说的是指 linux 下的环境吗?
2. 不可重入, 是否可简单理解为不能多个线程同时调用, 如果需要同时调用, 则需进行同步控制, 是这样吗?
3. 据我了解, 在windows 下的 vc 有 所谓的多线程 C  运行时库, 就是说如果你的程序需要用到多线程,应该链接到多线程的运行时库,这样C运行时库在多线程下就是安全的. 意思应该就是指malloc, free 是可以多线程同时调用的. 那么, linux 下的c 环境, 或者说gcc或者说glibc是否有这样的机制,抱歉我对linux还不是很熟.
4. 文中还提到其他标准I/O函数也是不可重入的,那请问两个线程同时对不同的文件进行读写也是不可以的吗?

请高手狠拍, 大家踊跃发言:wink:

论坛徽章:
0
2 [报告]
发表于 2008-01-11 09:52 |只看该作者
这些函数在glibc中线程安全的,但不是可重入的,不能用在信号处理函数中。

论坛徽章:
0
3 [报告]
发表于 2008-01-11 09:56 |只看该作者
是线程安全, 但又不是可重入, 看来我对可重入的函数理解有问题, 楼上能否再给解释下~ 我也再看下文档

重看了下文档就说, 可重入是指:

可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误

我从字面上理解就是指多线程调用同一函数, 可重入性就是指多线程安全性吧.

我再GOOGLE下~

[ 本帖最后由 srdrm 于 2008-1-11 09:57 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-01-11 09:59 |只看该作者

回复 #3 srdrm 的帖子

论坛精华中有,你去找找,很详细的。

论坛徽章:
0
5 [报告]
发表于 2008-01-11 10:02 |只看该作者
感谢各位, 我GOOGLE到一篇IBM网站上的文章, 已经解惑我的疑问了. 大家有兴趣也可看下

http://www.ibm.com/developerworks/cn/linux/l-reent.html

论坛徽章:
0
6 [报告]
发表于 2008-01-11 10:03 |只看该作者
原帖由 cugb_cat 于 2008-1-11 09:59 发表
论坛精华中有,你去找找,很详细的。

谢谢你的指点!

论坛徽章:
0
7 [报告]
发表于 2008-01-11 11:02 |只看该作者
这两天,俺也在看可重入
其时分两类:线程可重入(线程安全) 信号处理程序可重入(异步信号安全)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP