读书人

Glibc内存储器管理-ptmalloc2源代码分

发布时间: 2012-06-28 15:20:03 作者: rapoo

Glibc内存管理--ptmalloc2源代码分析(二十)

5.5.3? ptmalloc_lock_all(),ptmalloc_unlock_all(),ptmalloc_unlock_all2()

?函数ptmalloc_unlock_all2()被fork出的子线程调用,在Linux系统中,子线程(进程)unlock从父线程(进程)中继承的mutex不安全,会导致资源泄漏,但重新初始化mutex是安全的,所有增加了这个特殊版本用于Linux下的atfork handler。ptmalloc_unlock_all2()函数的处理流程跟ptmalloc_unlock_all()函数差不多,使用mutex_init()代替了mutex_unlock(),如果开启了PER_THREAD的优化,将从父线程中继承来的分配区加入到free_list中,对于子线程来说,无论全局变量atfork_recursive_cntr的值是多少,都将该值设置为0,因为ptmalloc_unlock_all2()函数只会被子线程调用一次。

?

?

读书人网 >操作系统

热点推荐