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()函数只会被子线程调用一次。?
?