2012-08-11 11 views
12

Tengo una pregunta general sobre subprocesos y devoluciones de llamada. Digamos, por ejemplo, que tenemos un hilo ejecutándose continuamente junto con el programa principal.Consulta general sobre funciones de devolución de llamada y subprocesos

El programa principal ha registrado una función de devolución de llamada con el hilo. Entonces, el hilo puede llamar a la función de devolución de llamada en cualquier momento. En general, registramos una devolución de llamada pasando un puntero de función al subproceso. Quiero saber cuándo llama la función de devolución de llamada por el subproceso, será parte de ese subproceso o será parte del programa principal. Deseo conocer el mecanismo de este proceso, por ejemplo, cómo se detiene o interrumpe la ejecución del programa principal cuando el hilo llama a la devolución de llamada. Otra cosa es cómo se comportará la pila de llamadas de función cuando se llame a la devolución de llamada.

+0

¿Qué enfoque para multi-threading usas? – klm123

Respuesta

10

Como regla general, las llamadas a funciones siempre se realizan en el contexto del llamante (thread). No importa si el destinatario es una función, función miembro, objeto functor o cualquier otra cosa.

En otras palabras, cuando el hilo llama a su devolución de llamada, la llamada ocurre en el hilo. El hilo principal no se detiene para ejecutar la devolución de llamada. De hecho, no está involucrado de ninguna manera con la ejecución de la devolución de llamada.

Varios marcos proporcionan trucos para que parezca que un hilo puede llamar a otro directamente, pero esto siempre se hace de forma cooperativa a través de algún tipo de mecanismo de paso de mensajes estructurado. Los hilos generalmente no mezclan las pilas de los demás.

+1

Entonces, por ejemplo, tengo 2 funciones en mi programa principal. 1) FunctionA() -> Esta es la devolución de llamada 2) FunctionB() -> Esta es una función normal. Ambas funciones pueden acceder a una variable global. Entonces, en este contexto, es necesario un mutex en esa variable. Porque la devolución de llamada puede ocurrir en cualquier momento. –

+2

@ user1592046: Sí. Cualquier acceso concurrente (al menos uno de los cuales es una escritura) debe estar protegido por algún tipo de mecanismo de sincronización. Si un hilo desea esperar a que el otro cambie la variable, también necesitará usar un mecanismo de señalización como un semáforo o una variable condicional. –

+0

Gracias por la aclaración :-) –

Cuestiones relacionadas