当前位置: 首页 > Linux kernrl, 内存管理 > 正文

[原]内存管理器(七)Glibc malloc 实现(三)–多线程思想(先占个坑)

基本方式

1.使用锁的方式来支持多线程

首先,每一个分配区均有一个结构体,这个结构体中有一个线程锁和一些其他的数据结构,其中别的东西我们今天并不关心,我们只看看这个锁今天做了哪些工作。全局还有一个锁list_mutex.主要是用来同步分配区链表的。

初始化

1.初始化分配区锁

对于主分区,首先初始化主分区的锁,然后让主分配区自己形成一个循环链表。对于其他的分配区也是如此。各个线程通过把自己所用的分配区指针保存到自己的线程私有实例上,标识自己所用分配区。

2.全局初始化

这里前边三句都很简单,第四步主要就是使用了几种函数处理了如果有线程正在被创建,又需要分配空间的问题。
thread_atfork()函数被调用说明这个进程正在创建别的线程,首先回调ptmalloc_lock_all 函数,获取全部分配区的锁,禁止所有的分配区分配内存,当子线程创建完毕,父进程就调用ptmalloc_lock_unlock 释放所有分配区的锁,子线程调用ptmalloc_unlock_all2()重新初始化内一个分配区的锁。

3.分配

博主今天淋雨感冒,暂时就写这里吧,有时间详细介绍下thread_atfork(_)这里,应该有的。

作者:zmrlinux 发表于2015/10/24 21:08:35 原文链接
阅读:9 评论:0 查看评论
]]>

本文固定链接: http://zmrlinux.com/2015/10/25/%e5%8e%9f%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e5%99%a8%ef%bc%88%e4%b8%83%ef%bc%89glibc-malloc-%e5%ae%9e%e7%8e%b0%ef%bc%88%e4%b8%89%ef%bc%89-%e5%a4%9a%e7%ba%bf%e7%a8%8b%e6%80%9d%e6%83%b3%e5%85%88/ | Kernel & Me

该日志由 root 于2015年10月25日发表在 Linux kernrl, 内存管理 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: [原]内存管理器(七)Glibc malloc 实现(三)–多线程思想(先占个坑) | Kernel & Me