免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2007-05-29 16:39 |只看该作者
原帖由 cugb_cat 于 2007-5-29 16:26 发表

那也就是说在调用malloc或free的时候都要保证线程间的互斥?



貌似某lib的malloc, free是thread_safe的...你自己google & 查查lib的说明吧^^

我不太确定...

论坛徽章:
0
12 [报告]
发表于 2007-05-29 16:46 |只看该作者
原帖由 MMMIX 于 2007-5-29 16:33 发表

malloc/free 是在 C 标准库中实现的。

呵呵,我的意思是glibc中实现~

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
13 [报告]
发表于 2007-05-29 17:02 |只看该作者
原帖由 Edengundam 于 2007-5-29 16:39 发表



貌似某lib的malloc, free是thread_safe的...你自己google & 查查lib的说明吧^^

我不太确定...

有几个概念需要澄清一下:
thread safe
using from a signal handler safe
reentrant

论坛徽章:
0
14 [报告]
发表于 2007-05-29 17:28 |只看该作者
原帖由 MMMIX 于 2007-5-29 17:02 发表

有几个概念需要澄清一下:
thread safe
using from a signal handler safe
reentrant




我的看法...这东西最近接触的...错了请指教
thread safe: 访问共享资源进行互斥. 非线程lib的malloc应该是非thread safe的.

async safe: 异步事件...恩...不可reentrant,还有malloc 这个应该都影响.

reentrant: strtok之类的. malloc本身也算有...

[ 本帖最后由 Edengundam 于 2007-5-29 17:40 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2007-05-29 17:29 |只看该作者
实验有问题吗?



  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <pthread.h>

  5. extern int errno;
  6. unsigned int ewok;

  7. void *MallocTest(void *arg)
  8. {
  9.         int *mem;
  10.         unsigned long count = 0;
  11.         int id = ewok;

  12.         while(1)
  13.         {
  14.                 mem = malloc(1024);
  15.                 if(!(count % 10000))
  16.                 {
  17.                         printf("count %d: 0x%08lx\n", id, mem);
  18.                 }
  19.                 free(mem);
  20.                 count++;
  21.          }
  22. }

  23. int main()
  24. {
  25.         pthread_t temp_thread;

  26.         pthread_create(&temp_thread, NULL, MallocTest, NULL);
  27.         ewok++;
  28.         sleep(5);

  29.         pthread_create(&temp_thread, NULL, MallocTest, NULL);
  30.         ewok++;
  31.         sleep(5);

  32.         pthread_create(&temp_thread, NULL, MallocTest, NULL);
  33.         ewok++;
  34.         sleep(5);

  35.         while(1){}

  36.         return 0;
  37. }


复制代码

论坛徽章:
0
16 [报告]
发表于 2007-05-29 17:29 |只看该作者
glibc2.3.6的malloc.c中有如下一段话:
  This is a version (aka ptmalloc2) of malloc/free/realloc written by
  Doug Lea and adapted to multiple threads/arenas by Wolfram Gloger.

所以glibc至少在2.3.6版以后的malloc应该是线程安全的

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
17 [报告]
发表于 2007-05-29 17:52 |只看该作者
原帖由 cugb_cat 于 2007-5-29 17:29 发表
glibc2.3.6的malloc.c中有如下一段话:

所以glibc至少在2.3.6版以后的malloc应该是线程安全的

http://www.unet.univie.ac.at/aix ... hread_safe_code.htm

建议看看,reentrancey 和 thread safety 是两个不同的概念。

[ 本帖最后由 MMMIX 于 2007-5-29 18:16 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2007-05-29 18:09 |只看该作者
原帖由 MMMIX 于 2007-5-29 17:52 发表

http://www.unet.univie.ac.at/aix ... hread_safe_code.htm

建议看看,reentrant 和 thread safe 是两个不同的概念。


我个人建议于此处使用它们的名词形式,如:
reentrancy
thread safety

.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
19 [报告]
发表于 2007-05-29 18:17 |只看该作者
原帖由 langue 于 2007-5-29 18:09 发表


我个人建议于此处使用它们的名词形式,如:
reentrancy
thread safety

.

用形容词是有点不当,顺手抄的。

论坛徽章:
0
20 [报告]
发表于 2007-05-29 18:31 |只看该作者
连malloc都是线程不安全的了?
什么世道
到底是还是不是啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP