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 la concurrencia
- Limitaciones de hardware en plataformas: hilos hardware, canales (pipes), coherencia de caché
- Conceptos elementales relacionados con programación multihilo (corrección de programas concurrentes, vivacidad, inanición, deadlock, condiciones de carrera, atomicidad, modelos de memoria, 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 la actualidad (C++2a)
- Implementación disponible en Boost: diferencias con respecto a la biblioteca estándar
Procesos e hilos
- Aplicaciones multiproceso vs multihilo
- Sistema operativo e hilos (breve visión de implementaciones disponibles)
- Mecanismos de sincronización de procesos y hilos
- Implementación estructural de la sincronización
- Especificidad del enfoque orientado a objetos en la implementación multihilo (papel 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 orientadas a acciones atómicas, secuencias de liberación
- Barreras de memoria
- Operaciones atómicas
Gestión de hilos en C++14 y versiones posteriores
- Clase std::thread e inicio de hilos
- Identificación del hilo
- Añadido (attach) y desvinculación (detach) de hilos
- Hilos versus contenedores estándar
- Gestión de excepciones en hilos C++14
Mutua exclusión y secciones críticas
- Reglas básicas de mutua exclusión
- 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 diferidos (std::lock)
- Propiedad y copropiedad de bloqueos e hilos
- Problema lectores-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 decisorias y colaboración con bloqueos
- Implementación de barreras activas e inactivas (espera activa, espera en vacío)
- Reanudación del funcionamiento de los hilos
- Comunicación entre hilos (modelo Actor y CSP)
Tareas asíncronas
- Eventos asíncronos y su gestión
- Futuros (futures)
- Promesas
- 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 tipos std::atomic
Específicos del diseño de APIs multihilo
- Diseño de estructuras con bloqueos: granularidad gruesa vs fina
- Rendimiento de código concurrente - técnicas de estimación y medición
- Particionamiento de datos
- Escalabilidad de soluciones
- Gestión de errores y situaciones excepcionales en la arquitectura de aplicaciones
Pruebas y depuración de aplicaciones multihilo
- Revisiones de código orientadas a operaciones multihilo
- Específicos del testeo de aplicaciones concurrentes
- Pruebas unitarias
- Aumento probabilístico de situaciones de error para fines de prueba
- Métodos formales de pruebas de aplicaciones multihilo
- Patrones de arquitectura de aplicaciones multihilo y su relación con pruebas y depuración (visión general)
Gestión avanzada de hilos
- Hilos dependientes (patrón Saga)
- Evitar la competición por datos
- Detención controlada e interrupción de hilos
- Interrupción de llamadas bloqueantes
- Gestión de interrupciones
- Sustracción de tareas
- Interrupción de tareas al final del funcionamiento de la aplicación
Patrones de diseño multihilo
- Tipos y propósitos de los patrones concurrentes
- Alcance de aplicación de los patrones
- Pool de hilos (Thread Pool)
- Patrón objeto activo (Active Object)
- Cola segura para múltiples hilos (Thread Safe Queue)
- Patrón productor-consumidor (Producer Consumer)
- Patrón monitor (Monitor)
- Seguridad multihilo de patrones GoF
Requerimientos
- Habilidad 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 e orientado a objetos) a nivel intermedio y avanzado
- Conocimiento de 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