Как видно из названия:
Если у меня есть класс со статической функцией-членом, который сам по себе не содержит статических переменных, могу ли я считать функцию-член реентерабельной?
Статические функции-члены ничем не отличаются от функций области имен (или даже функций-членов) в отношении повторного входа. Они не предрасположены в любом случае, это полностью зависит от того, что функция делает внутри.
Правила повторного входа изложены в Статья в Википедии о возвращении являются следующими:
так что, пока функция-член следует этим правилам, все должно быть в порядке.
Статья Используйте входящие функции для более безопасной обработки сигналов Я чувствую, дает немного лучшее описание:
Повторная функция — это функция, которая может использоваться более чем одной задачей.
одновременно, не опасаясь повреждения данных. И наоборот,
не реентерабельная функция — это функция, которая не может использоваться несколькими
задача, если взаимное исключение из функции не обеспечивается
используя семафор или отключая прерывания во время критических секций
кода. Функция повторного входа может быть прервана в любое время и
возобновлено в более позднее время без потери данных. Реентерабельные функции
либо использовать локальные переменные, либо защищать свои данные, когда глобальные переменные
используются.Реентерабельная функция:
- Не содержит статические данные при последовательных вызовах
- Не возвращает указатель на статические данные; все данные предоставляются вызывающей функцией
- Использует локальные данные или обеспечивает защиту глобальных данных, делая их локальную копию
- Не должен вызывать никакие не реентерабельные функции
а затем продолжаем объяснять, чем это отличается от безопасности потоков, прежде чем полностью перейти к статье.
Если ваша статическая функция-член содержит только автоматические переменные, вы можете считать ее повторной.