Gracias por enviar su consulta! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Gracias por enviar su reserva! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Programa del Curso
Desafíos y problemas de simultaneidad
- Limitaciones de hardware de la plataforma: subprocesos de hardware, canalizaciones, coherencia de caché
- Elementotros conceptos relacionados con la programación multihilo (corrección de un programa multihilo, viabilidad, inanición, interbloqueo, raza, atomicidad, modelos de coherencia, taxonomía de Flynn)
- Mecanismos disponibles en C++ para implementar multithreading y multiprocessing
- Implementación de la biblioteca estándar - Temas C++14 hasta la actualidad (C++2a)
- Implementación disponible en Boost: diferencias con la biblioteca estándar
Procesos y subprocesos
- Aplicaciones multiproceso vs. multiproceso
- Sistema operativo frente a subprocesos (una breve descripción general de las implementaciones disponibles)
- Mecanismos de sincronización de procesos y subprocesos
- Implementación estructurada de la sincronización
- Especificidad de la implementación de multithreading en el enfoque orientado a objetos (el papel del patrón RAII)
Modelo de memoria en el lenguaje C++
- Objetos y ubicaciones de memoria
- Programación y aplicación
- Relaciones: sincronización, precedencia, ordenación de operaciones para acciones atómicas, secuencias de liberación
- Barreras de memoria
- Operaciones atómicas
Gestión de subprocesos en el estándar C++14 y posteriores
- La clase std::thread y los subprocesos iniciales
- Identificación de hilos
- Unir y desconectar un hilo
- Subprocesos frente a contenedores estándar
- Control de excepciones en subprocesos C++14
Exclusión mutua y secciones críticas
- Reglas simples de exclusión mutua
- Conceptos (tipos) de objetos de bloqueo disponibles
- Introducción rápida al manejo del tiempo en C++14 (biblioteca de cronos)
- Las clases std::mutex, std::timed_mutex, std::shared_mutex y derivados
- Patrón RAII en el manejo de bloqueos (std::lock_guard, std::unique_lock)
- Bloqueos dependientes y diferidos (std::lock)
- Propiedad y copropiedad de cerraduras y roscas
- El problema de los lectores-escritores
- Inicialización única
- Memoria local (privada) del subproceso (std::thread_local)
Bloqueos de subprocesos y sincronización
- Operaciones de semáforo
- Bloqueos recursivos
- Bloqueos con una definición de nivel de bloqueo
- Variables de decisión y cooperación de bloqueo
- Implementación de esperas inactivas, esperas ocupadas
- Reanudar hilos
- Comunicación entre subprocesos (actor y modelo CSP)
Tareas asincrónicas
- Eventos asincrónicos y su control
- Futuro
- Promesas
- Tareas preparadas (packaged_task)
Tipos atómicos
- Tipos atómicos estándar
- Bandera atómica universal (std::atomic_flag)
- La plantilla de clase std::atomic<T> y sus especializaciones
- Funciones de utilidad (libres) de los tipos std::atomic
Detalles del diseño de API multiproceso
- Diseño de estructuras con enclavamientos: enclavamientos de grano grueso y fino
- Rendimiento de código concurrente: técnicas de estimación y medición
- Particionamiento de datos
- Escalabilidad de las soluciones
- Control de errores y excepciones en la arquitectura de la aplicación
Prueba y depuración de aplicaciones multiproceso
- Revisiones de código para operaciones multiproceso
- Detalles de las pruebas de aplicaciones multiproceso
- Pruebas unitarias
- Aumentar la probabilidad de emergencias a favor de las pruebas
- Métodos formales para probar aplicaciones multiproceso
- Patrones de arquitectura de aplicaciones multiproceso y pruebas y depuración (información general)
Gestión avanzada de subprocesos
- Hilos dependientes (patrón Saga)
- Evitar la competencia en el acceso a los datos
- Detención y anulación controlada de subprocesos
- Interrumpir llamadas de bloqueo
- Manejo de interrupciones
- Robar tareas
- Interrumpir tareas cuando finaliza una aplicación
Patrones de diseño de subprocesos múltiples
- Tipos y propósito de los patrones multihilo
- Ámbito de aplicación de las normas
- Grupo de subprocesos
- Patrón de objeto activo
- Cola segura de subprocesos múltiples
- Patrón Productor/Consumidor
- Patrón de monitor
- Seguridad de patrón multihilo GoF
Requerimientos
- Capacidad para utilizar herramientas para construir software en C++ en entorno GNU/Linux y/o MS Windows
- Conocimiento de temas de programación en C++ (paradigma procedimental y orientado a objetos) en niveles avanzados e intermedios
- Conocimientos de desarrollo de código generalizado (plantillas)
28 Horas