malloc的可重入性和线程安全分析
2024-08-29 05:27:46
malloc函数是一个我们经常使用的函数,如果不对会造成一些潜在的问题。下面就malloc函数的线程安全性和可重入性做一些分析。
我们知道一个函数要做到线程安全,需要解决多个线程调用函数时访问共享资源的冲突。而一个函数要做到可重入,需要不在函数内部使用静态或全局数据,不返回静态或全局数据,也不调用不可重入函数。
malloc函数线程安全但是不可重入的,因为malloc函数在用户空间要自己管理各进程共享的内存链表,由于有共享资源访问,本身会造成线程不安全。为了做到线程安全,需要加锁进行保护。同时这个锁必须是递归锁,因为如果当程序调用malloc函数时收到信号,在信号处理函数里再调用malloc函数,如果使用一般的锁就会造成死锁(信号处理函数中断了原程序的执行),所以要使用递归锁。
虽然使用递归锁能够保证malloc函数的线程安全性,但是不能保证它的可重入性。按上面的场景,程序调用malloc函数时收到信号,在信号处理函数里再调用malloc函数就可能破坏共享的内存链表等资源,因而是不可重入的。
至于malloc函数访问内核的共享数据结构可以正常的加锁保护,因为一个进程程调用malloc函数进入内核时,必须等到返回用户空间前夕才能执行信号处理函数,这时内核数据结构已经访问完成,内核锁已释放,所以不会有问题。
---------------------
作者:无忧V
来源:CSDN
原文:https://blog.csdn.net/weiganyi/article/details/11142347
版权声明:本文为博主原创文章,转载请附上博文链接!
最新文章
- HFS远程命令执行漏洞入侵抓鸡黑阔服务器
- 重置mysql数据库密码
- 移动端HTML5开发心得(转)
- [转]AS3复制可视对象
- linux命令介绍:df使用介绍
- Table View滑动时报错
- jQuery练习一好友列表变色
- Hibernate悲观锁/乐观锁
- 分布式内存对象缓存 memcached
- 【ROC曲线】关于ROC曲线、PR曲线对于不平衡样本的不敏感性分析说引发的思考
- 在C++中打印出变量的方法
- jQuery扩展extend一
- Linux系统基础命令
- 学习通过Thread+Handler实现非UI线程更新UI组件(转)
- [ionic3.x开发记录]ng-content使用
- WorldWind源码剖析系列:星球类World
- 高能天气——团队Scrum冲刺阶段-Day 6
- js 控制页面跳转的5种方法
- 关于C++中的string的小知识点
- C++_代码重用3-私有继承