Prácticamente cualquier tipo de código recursivo podrían ser clasificados como de reentrada (es decir, se puede llamar de nuevo en el mismo método sin haber terminado), pero esto se utiliza en particular cuando se habla de cerraduras, mutex, semáforos, etc. Para ejemplo, un bloqueo es reentrante si una vez que tenga el bloqueo puede éxito "bloquear" el código de nuevo (es decir, no a sí mismo callejón sin salida) - por ejemplo:
public void AddIfNecessary(string s) {
lock(syncObj) {
if(!Contains(s)) Add(s);
}
}
public void Add(string s) {
lock(syncObj) {
list.Add(s);
}
}
public bool Contains(string s) {
lock(syncObj) {
return list.Contains(s);
}
}
Aquí el hecho de que la el bloqueo es reentrante significa que podemos llamar al Contains
y Add
sin preocuparnos de que ya tengamos el "ex clusive "lock, simplificando el código. Internamente, se utiliza un contador en lugar de una simple bandera "en uso". La respuesta de
es curiosamente el primer hit de google: http://en.wikipedia.org/wiki/Reentrant_(subroutine) –
@Mitch, y si alguien extrae el bit que es relevante para RTOS lo vuelve a etiquetar y lo vuelve específico para las "disciplinas" eso debe ser pegado a "un poco de la pregunta, entonces con un poco de suerte, el primer hit de Google se convertirá en esta pregunta y, por lo tanto, TAN ... que todos queremos, ¿no? =) – Rob
@Rob: tal vez. Es difícil decir ..... –