免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 2007-05-29 19:55 |显示全部楼层
在这个链接中找到下面几句话:
http://www.laptev.org/doc/pthreads.html

Well, suppose that each thread calls printf():

                printf("i=%d s=%s\n",anint,astring);

The printf() call makes implicit use of malloc() to allocate the buffer that holds the string you are printing.

.......

The POSIX threads specification does demand that the calls in the C library (including malloc() and printf()) be thread-safe.

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

说是不同
哪位给最好能给个一个either reentrant or thread-safe的例子
想到的情况无非就是没有互斥使用stack以外的数据,实在看不出区别


The  strtok_r()  function is a reentrant version strtok().

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

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


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

可能是用的非阻塞式的

[ 本帖最后由 ypxing 于 2007-5-29 23:22 编辑 ]

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



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


刚刚想起来,有非阻塞式的,先检测一下,被锁了就返回

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


确实存在这个问题,针对于中断不是原子操作。
ypying提到的那个问题感觉有那么点意思~
如果“递归”调用使用锁实现的可重入函数,可能就成死锁了~~
呵呵,有时间研究下代码~~~


俺叫ypxing
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP