2010-02-17 13 views
8

¿Cuál es la diferencia entre una función de reentrada y una función de seguridad de subprocesos?Diferencia entre la función Reentrada y Thread-Safe

+1

http: // stackoverflow.com/questions/2274254/what-kind-of-code-can-be-called-re-entrant/2274289 # 2274289 –

+0

muy similar si no es idéntico: http://stackoverflow.com/questions/856823/threadsafe-vs- reentrante –

Respuesta

1

¿Has verificado wiki article on the subject. Lo explica bien, así que por favor mira eso para una discusión completa.

Unos pocos bits relevantes del artículo:

En informática, un programa de ordenador o subrutina es llamada entrante si puede ser interrumpido en medio de su ejecución, y ser llamado de nuevo con seguridad ("re -entrado ") antes de que sus invocaciones anteriores completen la ejecución. La interrupción podría ser causada por una acción interna, como un salto o una llamada, o por una acción externa, como una interrupción o señal de hardware. Una vez que la invocación reingresada se completa, las invocaciones anteriores reanudarán la ejecución correcta.

y

Esta definición de reentrada difiere de la de hilo de seguridad en entornos multi-hilo. Una subrutina reentrante puede lograr la seguridad de la hebra, pero ser reentrante solo puede no ser suficiente para ser seguro para subprocesos en todas las situaciones. Por el contrario, el código de seguridad de subprocesos no necesariamente tiene que ser reentrante (ver ejemplos a continuación).

+4

Por favor, publique una respuesta real que resuma el enlace en caso de que se enfríe (como es el caso aquí y ahora). – nedR

2

Reentrante significa que no hay estado global (solo local).

Thread safe significa que no es posible que 2 (o más) hilos entren en conflicto entre sí (escribiendo valores conflictivos).

+0

pero, como dice Brian, el artículo de la wiki lo explica bien ... –

2
  • Una función thread-safe se puede llamar de forma simultánea desde múltiples hilos, incluso cuando las invocaciones utilizan datos compartidos, ya que todos referencias a los datos compartidos se serializan.

  • Una función reentrante puede también ser llamado simultáneamente desde varios subprocesos, pero sólo si cada invocación utiliza sus propios datos.

Por lo tanto, una función del hilo de seguridad es siempre reentrante, sino una función reentrante no siempre es seguro para subprocesos.

La diferencia se puede cottoned con el ejemplo,

se dice que una clase sea reentrante si sus funciones miembro pueden ser llamados con seguridad de múltiples hilos, siempre que cada hilo utiliza una diferente instancia de la clase. La clase es segura para subprocesos si sus funciones miembro se pueden llamar de forma segura desde varios subprocesos, incluso si todos los subprocesos utilizan la misma instancia de la clase.

Fuente: Qt

Cuestiones relacionadas