2012-02-28 37 views
5

He estado trabajando en una aplicación C multiproceso (Linux) por un tiempo: una grabadora de video que tiene hilos para la captura de audio y video, codificación, multiplexación y escritura.Marco o patrón de aplicación multiproceso C

Comencé tirando juntos ad-hoc usando operaciones pthread, pero ahora estoy tratando de expandirlo para soportar más estados y refactorizar trozos de código que están apareciendo como duplicados para hacer con bloqueo, configuración de indicadores y señalización una condición, etc.

Hasta ahora lo que he llegado con algo como esto:

  • Cada hilo debe tener un candado mutex y dos condiciones - uno para despertar el hilo y el otro para señalar el subproceso ha terminado de hacer algunos trabajos que otro hilo puede estar esperando.
  • Las colas de datos son "propiedad" de un determinado hilo y están protegidas con el bloqueo de ese hilo.
  • Cada subproceso necesita el concepto de estados "activos" e "inactivos" y la capacidad de moverse entre ellos y señalar cuando termine.

Estoy planeando almacenar los elementos comunes en una estructura y tener una matriz de esas estructuras que puedo recorrer para iniciar, verificar y detener todos los hilos.

Como esto se convierte en un modelo de soporte de hilo más genérico, pensé que probablemente estaba reinventando la rueda, así que preguntaré aquí si hay algunos buenos patrones conocidos que debería aplicar.

+1

tener un vistazo a [Glib] (http://developer.gnome.org/glib/stable/ glib-core.html) –

+0

@Alexandre C. No sé mucho sobre Glib pero parece que solo abstrae hilos y agrega peso. Estoy buscando un modelo de interacción de hilos. – blueshift

Respuesta

4

Sus ideas me recuerdan mucho al modelo de informática de objetos activos implementado en los marcos de máquinas de estados QP. Específicamente, los marcos QP/C y QP/C++ han sido portados a POSIX (que incluye Linux, BSD, etc.). El puerto se ha descrito en detalle en la Nota de aplicación "QP y Linux" disponible en: http://www.state-machine.com/linux/AN_QP_and_Linux.pdf.

Éstos son los aspectos más destacados del puerto de QP a Linux:

máquina
  • Cada estado se ejecuta en su propio p-hilo. El subproceso p bloquea en una cola de eventos implementada con un mutex y una variable de condición. Cuando la cola de eventos recibe un evento, el hilo se desbloquea y el evento es procesado por la máquina de estado asociada con este hilo. (Este es un modelo informático de objeto activo bien conocido).

  • Las colas de eventos son propiedad de los hilos del objeto activo.

  • Cada hilo tiene toda la máquina de estados jerárquicos, por lo que puede tener estados "activo" o "inactivo'. Máquinas de estados jerárquicos (gráficos de estado UML) le permiten especificar las acciones y transiciones en el estado más alto nivel y reutilización este el comportamiento de los estados anidados. Esto contrarresta el estado transiciones "explosión" que tiene con FSM tradicionales.

+0

Esto se ve extremadamente interesante y relevante, ¡gracias! – blueshift

Cuestiones relacionadas