Что такое процедура повторного входа? - PullRequest
8 голосов
/ 11 августа 2011

Что такое повторяющаяся процедура, и можете ли вы привести пример сценария ее использования?

Редактировать: Кроме того, могут ли несколько процессов получить доступ к повторяющейся процедуре в параллельно ?

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

Ответы [ 3 ]

16 голосов
/ 11 августа 2011

Идея повторного входа заключается в том, что подпрограмма может быть вызвана, когда она уже находится в середине выполнения, и она все еще будет работать правильно.

Обычно это достигается с помощью использования только параметров и локальных переменных.объявлено в стеке (в терминах C, нет static localals).Также было бы важно, чтобы он не блокировал никакие глобальные ресурсы во время выполнения.

Теперь вы можете спросить: «Как могла бы произойти такая странная вещь, как подпрограмма, запускаемая несколько раз за раз?»Вот некоторые из возможных способов:

  • Подпрограмма рекурсивная (или взаимно-рекурсивная с некоторым другим набором подпрограмм).
  • Она вызывается другим потоком.
  • Он вызывается прерыванием.

Если произойдет что-либо из этого, и подпрограмма модифицирует глобальный (или C static локальный), то новое выполнение может потенциально уничтожитьизменения, сделанные в первом исполнении.Например, если этот глобал использовался в качестве переменной управления циклом, это может привести к тому, что первое выполнение, когда он, наконец, возобновит работу, зацикливается неверное число раз.

2 голосов
/ 11 августа 2011

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

1 голос
/ 02 апреля 2012

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

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

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

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

...