还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

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

来源:清泛原创     2020-09-05 13:17:48    人气:     我有话说( 0 人参与)

Windows Server2016服务器C++崩溃时容易不彻底,导致卡住死锁,Server2008死锁概率低一些,死锁感觉是由于malloc不可重入导致的。操作系统底层API行为可能不一致,可能有办法指定

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 可重入

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: