Почему является malloc не асинхронным безопасным сигналом?

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

19
задан Karel Bílek 29 July 2010 в 19:39
поделиться

1 ответ

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

  1. Ваш процесс зайдет в тупик внутри обработчика сигнала, потому что malloc не сможет получить блокировку кучи.
  2. Ваш процесс повредит свою кучу, потому что malloc действительно получает блокировку (или не думает, что она ему нужна), а затем продолжает преобразовывать кучу в несогласованную, что приводит к последующему сбою.
25
ответ дан 30 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: