为什么malloc不是异步信号安全?

时间:2010-07-29 19:39:43

标签: unix

为什么不能在信号处理程序中使用malloc?什么可能“发生错误”?

1 个答案:

答案 0 :(得分:24)

可以随时调用信号处理程序,包括在对malloc的另一次调用正在进行的时间。如果发生这种情况,将发生以下两种情况之一:

  1. 您的进程将在信号处理程序内死锁,因为malloc将无法获取堆锁。
  2. 你的进程会破坏它的堆,因为malloc 获取锁(或者认为它不需要它),然后继续渲染堆不一致,导致以后崩溃。