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 de hardware de las plataformas - hilos de hardware, pipelines, coherencia de caché
- Conceptos elementales relacionados con la programación multihilo (corrección del programa multihilo, vivacidad, inanición, punto muerto, carrera, atomicidad, modelos de coherencia, taxonomía de Flynn)
- Mecanismos disponibles en C++ para implementar concurrencia y paralelismo
- Implementación de la biblioteca estándar: elementos desde C++14 hasta el día de hoy (C++2a)
- Implementación disponible en Boost - diferencias respecto a la biblioteca estándar
Procesos y hilos
- Aplicaciones multiproceso vs. multihilo
- Sistema operativo e hilos (visión general breve de las implementaciones disponibles)
- Mecanismos de sincronización de procesos y hilos
- Implementación estructural de la sincronización
- Especificidad de la implementación multihilo desde un enfoque orientado a objetos (el papel del patrón RAII)
Modelo de memoria en C++
- Objetos y ubicaciones en la memoria
- Ordenación y aplicación de operaciones
- Relaciones: sincronización, precedencia, ordenamiento de operaciones hacia acciones atómicas, secuencias de liberación
- Barreras de memoria
- Operaciones atómicas
Gestión de hilos en C++14 y posteriores
- Clase std::thread y ejecución de hilos
- Identificación del hilo
- Vinculación y desvinculación de hilos
- Hilos y contenedores estándar
- Manejo de excepciones en hilos C++14
Exclusión mutua y secciones críticas
- Principios simples de exclusión mutua
- Conceptos (tipos) de objetos bloqueantes 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 retrasados (std::lock)
- Propiedad y copropiedad de bloqueos e hilos
- Problema lectores-escritores
- Inicialización única
- Memoria local (privada) del hilo (ang. std::thread_local)
Bloqueos y sincronización de hilos
- Operaciones en semáforos
- Bloqueos recursivos
- Bloqueos con definición del nivel de bloqueo
- Variables de decisión y colaboración con bloqueos
- Implementación de barreras activas y pasivas (ang. Idle Waits, Busy Waits)
- Reanudación de hilos
- Comunicación entre hilos (modelo Actor y CSP)
Tareas asíncronas
- Eventos asíncronos y su manejo
- Futuros (ang. future)
- Promesas (ang. promise)
- Tareas preparadas (ang. 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 auxiliares (libres) de tipos std::atomic
Especificidad del diseño API multihilo
- Diseño de estructuras utilizando bloqueos: bloqueos gruesos y finos
- Rendimiento del código concurrente - técnicas de estimación y medición
- Particionamiento de datos
- Escalabilidad de soluciones
- Manejo de errores y situaciones excepcionales en la arquitectura de aplicaciones
Pruebas y depuración de aplicaciones multihilo
- Revisiones de código para operaciones multihilo
- Especificidad de pruebas de aplicaciones multihilo
- Pruebas unitarias
- Aumento de la probabilidad de situaciones anómalas en aras de las pruebas
- Métodos formales para probar aplicaciones multihilo
- Patrones de arquitectura de aplicaciones multihilo frente a pruebas y depuración (visión general)
Gestión avanzada de hilos
- Hilos dependientes (patrón Saga)
- Evitar competencia en el acceso a datos
- Detección controlada e interrupción del hilo
- Interrupción de llamadas bloqueantes
- Manejo de interrupciones
- Robo de tareas
- Interrupción de tareas durante el final de la aplicación
Patrones de diseño multihilo
- Tipos y propósito de los patrones multihilo
- Rango de aplicación de patrones
- Grupo de hilos (ang. Thread Pool)
- Patrón objeto activo (ang. Active Object)
- Cola segura multihilo (ang. Thread Safe Queue)
- Patrón productor-consumidor (ang. Producer Consumer)
- Patrón monitor (ang. Monitor)
- Seguridad multihilo de los patrones GoF
Requerimientos
- Habilidad para utilizar herramientas de compilación y construcción de software en C++ en el entorno GNU/Linux y/o MS Windows
- Conocimiento de temas avanzados e intermedios-avanzados de programación en C++ (tanto paradigma procedimental como orientado a objetos)
- Conocimiento de los temas relacionados con la generación de código genérico (plantillas/símbolos)
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