URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4283
[ Назад ]

Исходное сообщение
"reentrant functions"

Отправлено Аноним , 20-Май-05 22:49 
Какой смысл имеют т.наз. reentrant functions (не знаю как по-русски) в коде ядра или библиотек, напр., функция open содержит не код, а просто внешний интерфейс к какой-нибудь функции навроде _open_r. Зачем такая вложенность?

Содержание

Сообщения в этом обсуждении
"reentrant functions"
Отправлено romanSA , 23-Май-05 17:18 
1. Далеко не везде реализация выглядит именно так.
2. reentrant функция нужна для того, чтобы в момент её выполнения можно было бы вызвать эту же функцию ещё раз, например в случае многопоточного приложения или обработки сигнала. В случае reentrant функции гарантируется корректное поведение всех одновременно вызванных "копий" этой функции в процессе.

Простой пример не reentrant функции:

char * f_not_reentrant ()
{
  static char buf [...];

  /*
   ... заполняем буфер
   */
  return buf;
}

Пусть при выполнении этой функции процесс перехватывает сигнал.
В этом случае, если в обработчике сигнала вызывается f_not_reentrant,
то вывод первоначально вызванной функции может быть неверным.