程序崩溃时malloc/new可能导致死锁,程序卡死退不出

清泛原创

1、程序崩溃时malloc/new可能导致死锁,程序卡死退不出。Win、Linux下都会发生,应该是malloc系统函数的不可重入性导致的,函数中会加锁,当某个线程崩溃malloc没有正常返回时,其他线程就会发生死锁现象。而且只有崩溃时才有malloc的可重入性的问题。

2、Linux下可以通过添加一个宏 _REENTRANT 解决(编译时使用libc中安全可重入的malloc函数),Windows未知。


另外,Windows Server2016服务器C++崩溃时容易不彻底,导致卡住死锁,Server2008死锁概率低一些,死锁感觉是由于malloc不可重入导致的。Server 2016 内存非法访问的异常也很容易导致程序卡死,崩溃不掉,Server 2008一般会直接崩溃;但是其他某些诸如除零异常,两个系统都会正常崩溃掉。

操作系统底层API行为可能不一致,可能有办法指定2016直接崩溃不让它卡住吧。

(待续...)

deadlock 可重入

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部