Являются ли статические функции-члены реентерабельными?

Как видно из названия:

Если у меня есть класс со статической функцией-членом, который сам по себе не содержит статических переменных, могу ли я считать функцию-член реентерабельной?

2

Решение

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

4

Другие решения

Правила повторного входа изложены в Статья в Википедии о возвращении являются следующими:

  • Повторно введенный код не может содержать какие-либо статические (или глобальные) непостоянные данные.
  • Повторно введенный код не может изменять свой собственный код.
  • Повторно введенный код не может вызывать не повторяющиеся компьютерные программы или процедуры.

так что, пока функция-член следует этим правилам, все должно быть в порядке.

Статья Используйте входящие функции для более безопасной обработки сигналов Я чувствую, дает немного лучшее описание:

Повторная функция — это функция, которая может использоваться более чем одной задачей.
одновременно, не опасаясь повреждения данных. И наоборот,
не реентерабельная функция — это функция, которая не может использоваться несколькими
задача, если взаимное исключение из функции не обеспечивается
используя семафор или отключая прерывания во время критических секций
кода. Функция повторного входа может быть прервана в любое время и
возобновлено в более позднее время без потери данных. Реентерабельные функции
либо использовать локальные переменные, либо защищать свои данные, когда глобальные переменные
используются.

Реентерабельная функция:

  • Не содержит статические данные при последовательных вызовах
  • Не возвращает указатель на статические данные; все данные предоставляются вызывающей функцией
  • Использует локальные данные или обеспечивает защиту глобальных данных, делая их локальную копию
  • Не должен вызывать никакие не реентерабельные функции

а затем продолжаем объяснять, чем это отличается от безопасности потоков, прежде чем полностью перейти к статье.

3

Если ваша статическая функция-член содержит только автоматические переменные, вы можете считать ее повторной.

0
По вопросам рекламы [email protected]