栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

malloc如何在多线程环境中工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

malloc如何在多线程环境中工作?

glibc 2.15
经营多个分配 场所
。每个竞技场都有自己的锁。当线程需要分配内存时,
malloc()
选择一个竞技场,将其锁定,然后从中分配内存。

选择竞技场的机制有些复杂,旨在减少锁争用:

考虑到这一点,

malloc()
基本上看起来像这样(为简便起见编辑):

  mstate ar_ptr;  void *victim;  arena_lookup(ar_ptr);  arena_lock(ar_ptr, bytes);  if(!ar_ptr)    return 0;  victim = _int_malloc(ar_ptr, bytes);  if(!victim) {        if(ar_ptr != &main_arena) {      (void)mutex_unlock(&ar_ptr->mutex);      ar_ptr = &main_arena;      (void)mutex_lock(&ar_ptr->mutex);      victim = _int_malloc(ar_ptr, bytes);      (void)mutex_unlock(&ar_ptr->mutex);    } else {            ar_ptr = arena_get2(ar_ptr->next ? ar_ptr : 0, bytes);      (void)mutex_unlock(&main_arena.mutex);      if(ar_ptr) {        victim = _int_malloc(ar_ptr, bytes);        (void)mutex_unlock(&ar_ptr->mutex);      }    }  } else    (void)mutex_unlock(&ar_ptr->mutex);  return victim;

该分配器称为

ptmalloc
。它基于Doug
Lea的早期工作,并由Wolfram Gloger维护。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394210.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号