Вспоминая прошлые практики, я никогда не рассматривал и не практиковал использование статических переменных для рекурсивных функций. За исключением констант.
- Повторно поступающие функции не изменяют статические переменные или общие ресурсы и не читают статические неконстантные или изменяемые общие ресурсы.
- Следовательно, Re-entrant => поточно-ориентированный, но не наоборот.
- Рекурсивные функции, модифицирующие статические переменные, не являются реентерабельными.
Таким образом,
повторяющиеся рекурсивные функции являются поточно-ориентированными.
Хотя нерекурентные рекурсивные функции не являются поточно-ориентированными, за исключением случаев, когда доступ к общим / статическим ресурсам эффективно ограничен границами синхронизации.
Тогда следующий вопрос требует ответа.
Если функция изменяет запись в базе данных, это больше не делает ее входной?
Я думаю, что до тех пор, пока внешний ресурс создается для каждого энтрантирования, функция является реентерабельной. Например, запись в базе данных с уникальным ключом запуска. Новая запись с новым ключом запуска генерируется для каждого участника.
Однако, действительно ли это похоже на создание статической переменной, безопасной для потоков? Похоже, это больше похоже на потоковую безопасную статическую хеш-таблицу, которая генерирует уникальный ключ, пару значений для каждого входа и, следовательно, пары ключей и значений не разделяются между участниками.
Таким образом, когда записи базы данных или статические ресурсы распределяют уникальные экземпляры своих ресурсов в расчете на вход, функция эффективно возвращается, но я думаю, что из-за зависимости от потоковой защиты внешнего общего ресурса ученые могут сказать является потокобезопасным, но не повторным входом.
За такой аргумент я бы умолял. Например, для гипотетического языка программирования и его спецификации ни одна из его реализаций не ограничивает использование общей базы данных или глобального хеша для хранения переменных. Таким образом, программист не знает о поточно-управляемом ресурсе, используемом под реализацией языка. Таким образом, программист выходит и пишет «возвращающуюся» функцию, или он так думает. Так значит ли это, что его / ее «входящая функция» не возвращается?
Следовательно, мой вывод заключается в том, что до тех пор, пока статический / разделяемый ресурс распределяет уникальный экземпляр для каждого входа, функция возвращается.
Извиняюсь за придумывание терминов энтрантификация / ре-энтрантификация, из-за отсутствия у меня знаний для лучшего слова.