信号处理程序可以在任何时间被调用,甚至在另一个对malloc的调用正在进行时也可能发生。如果这种情况发生,会出现以下两种情况之一: 由于malloc无法获取堆锁定,您的进程将在信号处理程序中出现死锁。 由于malloc(或没有考虑到需要堆锁定)确实获取了锁,然后继续使堆不一致,导致稍后的崩溃,因此您的进程可能会损坏其堆。
malloc()
,这样做将扩展程序从可能触发异步信号的各种条件中恢复的能力。声称malloc()
不是信号安全的陈述并不意味着不应指定任何实现为信号安全,而是为了避免要求即使是那些客户不需要malloc()
信号安全的实现,在运行此类安全性会很昂贵的平台上,也需要提供它才能符合规范。 - supercat