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.
Duración 28 horas
Temario del curso
Desafíos y problemas de concurrencia
- Limitaciones del hardware de la plataforma: hilos de hardware, pipelines, coherencia de la memoria caché
- Conceptos elementales relacionados con la programación multihilo (corrección de programas multihilo, ciclo de vida, inanición, bloqueo, condiciones de carrera, atomicidad, modelos de coherencia, taxonomía de Flynn)
- Mecanismos disponibles en C++ para implementar multihilo y multiproceso
- Implementación de la biblioteca estándar: elementos desde C++14 hasta la actualidad (C++2a)
- Implementación disponible en Boost: diferencias en comparación con la biblioteca estándar
Procesos e hilos
- Aplicaciones multiproceso frente a multihilo
- Sistema operativo e hilos (breve revisión de las implementaciones disponibles)
- Mecanismos de sincronización de procesos e hilos
- Implementación estructural de la sincronización
- Especificidad de la implementación multihilo en el enfoque orientado a objetos (rol del patrón RAII)
Modelo de memoria en C++
- Objetos y ubicaciones en memoria
- Ordenamiento de operaciones y su imposición
- Relaciones: sincronización, precedencia, ordenamiento de operaciones para acciones atómicas, secuencias de liberación
- Barreras de memoria
- Operaciones atómicas
Gestión de hilos en el estándar C++14 y versiones posteriores
- Clase std::thread y ejecución de hilos
- Identificación de hilos
- Unión y desvinculación de hilos
- Hilos y contenedores estándar
- Manejo de excepciones en hilos de C++14
Exclusión mutua y secciones críticas
- Principios básicos de exclusión mutua
- Conceptos (tipos) de objetos de bloqueo disponibles
- Introducción rápida al manejo del tiempo en C++14 (biblioteca chrono)
- Clases std::mutex, std::timed_mutex, std::shared_mutex y derivadas
- Patrón RAII en el manejo de bloqueos (std::lock_guard, std::unique_lock)
- Bloqueos dependientes y diferidos (std::lock)
- Propiedad y propiedad compartida de bloqueos e hilos
- Problema de lectores y escritores
- Inicialización única
- Memoria local (privada) del hilo (std::thread_local)
Bloqueos y sincronización de hilos
- Operaciones con semáforos
- Bloqueos recursivos
- Bloqueos con definición de nivel de bloqueo
- Variables de decisión y colaboración con bloqueos
- Implementación de barreras activas y pasivas (Idle Waits, Busy Waits)
- Reactivación de hilos
- Comunicación entre hilos (modelo de Actores y CSP)
Tareas asíncronas
- Eventos asíncronos y su manejo
- Futuros (future)
- Promesas (promise)
- Tareas preparadas (packaged_task)
Tipos atómicos
- Tipos atómicos estándar
- Bandera atómica universal (std::atomic_flag)
- Plantilla de clase "std::atomic<T>" y sus especializaciones
- Funciones de utilidad (libres) de los tipos std::atomic
Especificidad del diseño de APIs multihilo
- Diseño de estructuras con bloqueos: bloqueos de granularidad gruesa y fina
- Rendimiento de código concurrente: técnicas de estimación y medición
- Particionamiento de datos
- Escalabilidad de las soluciones
- Manejo de errores y situaciones excepcionales en la arquitectura de la aplicación
Pruebas y depuración de aplicaciones multihilo
- Revisiones de código enfocadas en operaciones multihilo
- Especificidad de las pruebas de aplicaciones multihilo
- Pruebas unitarias
- Aumento de la probabilidad de situaciones de emergencia para fines de pruebas
- Métodos formales de prueba de aplicaciones multihilo
- Patrones de arquitectura de aplicaciones multihilo frente a pruebas y depuración (revisión)
Gestión avanzada de hilos
- Hilos dependientes (patrón Saga)
- Evitar la competencia en el acceso a datos
- Detención y cancelación controladas de hilos
- Interrupción de llamadas bloqueantes
- Manejo de interrupciones
- Robo de tareas
- Interrupción de tareas durante el cierre de la aplicación
Patrones de diseño multihilo
- Tipos y propósitos de los patrones multihilo
- Alcance de aplicación de los patrones
- Pools de hilos (Thread Pool)
- Patrón de objeto activo (Active Object)
- Cola segura para múltiples hilos (Thread Safe Queue)
- Patrón de productor y consumidor (Producer Consumer)
- Patrón monitor (Monitor)
- Seguridad multihilo de los patrones GoF
Requerimientos
- Capacidad para utilizar herramientas de construcción de software en C++ en entornos GNU/Linux y/o MS Windows
- Conocimiento de temas de programación en C++ (paradigma procedural y orientado a objetos) a nivel avanzado e intermedio-avanzado
- Conocimiento de temas relacionados con la creación de código genérico (plantillas)
Reseñas (1)
Ejemplos prácticos
Jan Kaniuka - SIEC BADAWCZA LUKASIEWICZ - PRZEMYSLOWY INSTYTUT AUTOMATYKI I POMIAROW PIAP
Curso - Programowanie wielowątkowe w języku C++
Traducción Automática