Подтвердить что ты не робот

Почему malloc не поддерживает асинхронный сигнал?

Почему нельзя использовать malloc в обработчиках сигналов? Что может произойти неправильно?

4b9b3361

Ответ 1

Обработчик сигналов можно вызывать в любое время, в том числе во время выполнения другого вызова malloc. Если это произойдет, произойдет одна из двух вещей:

  • Ваш процесс будет блокироваться внутри обработчика сигнала, потому что malloc не сможет получить блокировку кучи.
  • Ваш процесс испортит его кучу, потому что malloc получает блокировку (или не думает, что ей это нужно), а затем переходит к тому, чтобы сделать кучу непоследовательной, что приведет к последующему сбою.