代码之家  ›  专栏  ›  技术社区  ›  Karel Bílek

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

  •  18
  • Karel Bílek  · 技术社区  · 16 年前

    为什么不能在信号处理程序中使用malloc?什么会“出错”?

    1 回复  |  直到 16 年前
        1
  •  25
  •   JSBÕ±Õ¸Õ£Õ¹    14 年前

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

    1. 您的进程将在信号处理程序中死锁,因为 马洛克 将无法获取堆锁。
    2. 您的进程将损坏其堆,因为 马洛克 做 获取锁(或者认为它不需要锁),然后继续使堆不一致,导致稍后的崩溃。