Мое понимание «повторной функции» заключается в том, что это функция, которая может быть прервана (например, с помощью ISR или рекурсивного вызова), а затем возобновлена, так что общий вывод функции не затрагивается ни в одном путем прерывания.Путаница в отношении реентерабельных функций
Ниже приведен пример функции возвратного из Википедии https://en.wikipedia.org/wiki/Reentrancy_(computing)
int t;
void swap(int *x, int *y)
{
int s;
s = t; // save global variable
t = *x;
*x = *y;
// hardware interrupt might invoke isr() here!
*y = t;
t = s; // restore global variable
}
void isr()
{
int x = 1, y = 2;
swap(&x, &y);
}
Я думал, что, если мы изменим ISR так:
void isr()
{
t=0;
}
И скажем, то, что основная функция вызывает функцию подкачки, но затем внезапно происходит прерывание, тогда выход наверняка будет искажен, поскольку своп не будет правильным, что, на мой взгляд, делает эту функцию не реентерабельной.
Я думаю, правильно или неправильно? Есть ли какая-то ошибка в моем понимании реентракции?