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.
tener un vistazo a [Glib] (http://developer.gnome.org/glib/stable/ glib-core.html) –
@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