首页 > 其他 > 详细

信号处理函数陷阱:调用malloc导致死锁[转]

时间:2019-12-18 01:16:14      阅读:217      评论:0      收藏:0      [点我收藏+]

概览

因malloc是加锁的,上网了解的相关信息,额外了解到信号处理规范使用,mark

正文

在执行malloc的过程中,跳转到了信号处理函数中。而信号处理函数在调用某个系统api时,内部又调用了malloc。 看了glibc源码就会知道,malloc内部也是有锁、而且是非嵌套的,如果在上一次调用中拿到锁,又跳转到信号处理函数中再次malloc,自然就导致死锁了。而且即使没有死锁,也极有可能破坏malloc内部维护的一些全局信息,导致后面莫名其妙的崩溃;由此可见,对于信号处理函数“必须保证可重入”这一点,在实际编码中必须慎之又慎,时刻谨记。
一般来说,信号处理函数中要做的事情应该尽量简单。通常可以置一个标识,由其他线程检测到这个标识后再做相应处理,而不是直接在信号处理函数中做这些事情。

ref

https://blog.csdn.net/zyboy2000/article/details/78964314

信号处理函数陷阱:调用malloc导致死锁[转]

原文:https://www.cnblogs.com/ishen/p/12057660.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!