new和malloc是线程安全的吗?

看到有人被问到这一题,但是网上查到的都说的不清不楚的#面经#
全部评论
这个要从运行库的角度来说。微软和Linux平台的C运行库在早期均提供线程安全和线程不安全版本,区别就是效率上的一些差距。现在来说基本都是线程安全的运行库了,那么new在不重载空间分配器的前提下,它和malloc都是线程安全的,也就是说函数内部会对一些数据结构上锁。但它们是不可重入函数,非异步信号安全,即进程执行流正在malloc中,这时需要相应信号,在信号处理函数中再调用malloc,所以这个锁应该是递归锁。在malloc中改变了内存管理的数据,那么信号处理函数结束后,原来的malloc看到被改变的内存管理数据结构后会一脸懵逼,怎么一眼没找看到就变了,从而产生错误的结果
13 回复
分享
发布于 2018-07-20 22:21

相关推荐

点赞 9 评论
分享
牛客网
牛客企业服务