2012-03-23 20 views
6

asíncrono señal de acuerdo con el Capítulo 12.5 APUE 2e:Diferencia entre el hilo de seguridad y seguro

Si una función es reentrante con respecto a los múltiples hilos, nos dicen que es seguro para subprocesos. Sin embargo, esto no nos dice si la función es reentrante con respecto a los manejadores de señal. Decimos que una función que es segura para reingresar desde un manejador de señal asíncrono es la señal asíncrona segura.

Mis preguntas son

P1:

¿Hay una "re-entrante en general" concepto (lo que significa re-entrantcy en todas las circunstancias)? Si existe, ¿el reentrante general es igual al reentrante solo con respecto a la señal multihilo y la señal asíncrona? ¿O hay una tercera condición que debe tenerse en cuenta cuando se habla de un reingreso general?

P2:

Seguridad de los hilos no implica la seguridad de señal asíncrona, lo cual es obvio. Pero, ¿la seguridad de la señal asíncrona implica la seguridad del hilo con seguridad? Busqué mucho en Google, la gente dice que sí, pero no encuentro ninguna fuente para ello.

P3:

Si ambas respuestas a Q1 y Q2 son sí, supongo reentrante en general es exactamente igual a la señal asíncrona-seguro?

Respuesta

5

Q1: async-signal safe es el concepto más fuerte de reentrada. Requiere un uso muy cuidadoso de los recursos y es difícil de administrar en el código de aplicación multiplataforma.

Q2: async-signal safe implica hilo seguro. El hilo seguro significa que está bien intentar llamar a la función dos veces, pero de diferentes hilos; async-signal safe es más fuerte porque dos invocaciones de la función pueden estar en el mismo hilo. Esto hace las cosas mucho más difíciles, porque no puede simplemente esperar a que la otra invocación de la función libere sus bloqueos, la segunda llamada dentro del manejador de señal tiene que ser capaz de interrumpir la primera incluso si los recursos compartidos están en un estado inconsistente , luego restaura cosas cuando sale Básicamente es imposible utilizar los recursos compartidos/estado de un manejador de señal: siempre use el "truco de auto-pipa" a menos que realmente sepa cómo funcionan los manejadores de señal y tenga alguna razón oscura para escribir código insano.

Q3: algunas personas pueden usar el reentrante para significar solo un hilo seguro. Los controladores de señal de Unix son el único lugar común donde se necesita algo más fuerte, y eso es un poco oscuro porque no debería tratar de hacer algo inteligente allí.

+0

Encontré este ejemplo: https://en.wikipedia.org/wiki/Reentrancy_(computing) Consulte la segunda función de intercambio en la wiki, es una señal asíncrona segura, pero no es segura para subprocesos. Así que creo que la señal asíncrona segura NO implica un hilo seguro. – PickBoy

+0

¡Buen punto, eso es un contraejemplo! Bastante ingenioso sin embargo. –

Cuestiones relacionadas