реентерабельность
Автор ЀГН задал вопрос в разделе Наука, Техника, Языки
Что такое реентерабельная программа? и получил лучший ответ
Ответ от Mikhail Levin[гуру]
от ре-энтер
Программа, в которую можно повторно войти.
Например, асинхронно работающие потоки могут вызывать ее не заботясь о том, что с ней может работать другой поток.
Простой пример на Си, факториал:
неррентерабелная:
int f, i;
int fact(int n){
for(f = i =1; i <= n; i++)
k *= i;
return i;
}
Проблемы ясны? Если один поток уже считает факториал, в то время как другой снова входит в функцию, они портят друг другу переменные i и k.
Реентерабельный вариант:
int fact(int n){
int f, i;
for(f = i =1; i <= n; i++)
k *= i;
return i;
}
Теперь переменные в стеке - а он у каждого потока свой собственный
Ответ от G0 t0[гуру]
В системах разделения времени эта программа в одном экземпляре загружалась в память и дальше по очереди обслуживала всех работающих с ней прользователей. Если вычисления были длинными, своповала их, запоминая текущее состояни, а при следующем сеансе обслуживания продолжала вычисления с прерванного места.
В системах разделения времени эта программа в одном экземпляре загружалась в память и дальше по очереди обслуживала всех работающих с ней прользователей. Если вычисления были длинными, своповала их, запоминая текущее состояни, а при следующем сеансе обслуживания продолжала вычисления с прерванного места.
Ответ от Dims[гуру]
Программу, которую можно запустить несколько раз параллельно и она будет работать правильно. Если это не так, то каждый, кто хочет запустить программу, должен ждать, пока закончится её исполнение, запущенное кем-то другим.
Программу, которую можно запустить несколько раз параллельно и она будет работать правильно. Если это не так, то каждый, кто хочет запустить программу, должен ждать, пока закончится её исполнение, запущенное кем-то другим.
Ответ от Ольга Осипова[гуру]
Компьютерная программа в целом или её отдельная процедура называется реентерабельной, если она разработана таким образом, что одна и та же копия инструкций программы в памяти может быть совместно использована несколькими пользователями илипроцессами
При этом второй пользователь может вызвать реентерабельный код до того, как с ним завершит работу первый пользователь и это как минимум не должно привести к ошибке, а в лучшем случае не должно вызвать потери вычислений (то есть не должно появиться необходимости выполнять уже выполненные фрагменты кода). Реентерабельность тесно связана с безопасностью функции в многопоточной среде (thread-safety), тем не менее, это разные понятия. Обеспечение реентерабельности является ключевым моментом при программировании многозадачных систем, в частности, операционных систем.
Для обеспечения реентерабельности необходимо выполнение нескольких условий:
* Никакая часть вызываемого кода не должна модифицироваться.
* Вызываемая процедура не должна сохранять информацию между вызовами.
* Если процедура изменяет какие-либо данные, то они должны быть уникальными для каждого пользователя.
* Процедура не должна возвращать указатели на объекты, общие для разных пользователей.
В общем случае, для обеспечения реентерабельности необходимо, чтобы вызывающий процесс или функция каждый раз передавал вызываемому процессу все необходимые данные. Таким образом, функция, которая зависит только от своих параметров, не использует глобальные и статические переменные и вызывает только реентерабельные функции, будет реентерабельной. Если функция использует глобальные или статические переменные, необходимо обеспечить, чтобы каждый пользователь хранил свою локальную копию этих переменных.
Источник : еентерабел ьность
Компьютерная программа в целом или её отдельная процедура называется реентерабельной, если она разработана таким образом, что одна и та же копия инструкций программы в памяти может быть совместно использована несколькими пользователями илипроцессами
При этом второй пользователь может вызвать реентерабельный код до того, как с ним завершит работу первый пользователь и это как минимум не должно привести к ошибке, а в лучшем случае не должно вызвать потери вычислений (то есть не должно появиться необходимости выполнять уже выполненные фрагменты кода). Реентерабельность тесно связана с безопасностью функции в многопоточной среде (thread-safety), тем не менее, это разные понятия. Обеспечение реентерабельности является ключевым моментом при программировании многозадачных систем, в частности, операционных систем.
Для обеспечения реентерабельности необходимо выполнение нескольких условий:
* Никакая часть вызываемого кода не должна модифицироваться.
* Вызываемая процедура не должна сохранять информацию между вызовами.
* Если процедура изменяет какие-либо данные, то они должны быть уникальными для каждого пользователя.
* Процедура не должна возвращать указатели на объекты, общие для разных пользователей.
В общем случае, для обеспечения реентерабельности необходимо, чтобы вызывающий процесс или функция каждый раз передавал вызываемому процессу все необходимые данные. Таким образом, функция, которая зависит только от своих параметров, не использует глобальные и статические переменные и вызывает только реентерабельные функции, будет реентерабельной. Если функция использует глобальные или статические переменные, необходимо обеспечить, чтобы каждый пользователь хранил свою локальную копию этих переменных.
Источник : еентерабел ьность
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Что такое реентерабельная программа?