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 de hardware, pipes (tuberías), coherencia de caché
- Conceptos básicos relacionados con la programación multihilo (correctez de un programa multihilo, vida útil, inanición, interbloqueo, condiciones de carrera, atomicidad, modelos de consistencia, 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 el día de hoy (C++2a)
- Implementaciones disponibles en Boost: diferencias respecto a la biblioteca estándar
Procesos e hilos
- Aplicaciones multiproceso frente a multihilo
- Sistema operativo y hilos (breve repaso de las implementaciones disponibles)
- Mecanismos de sincronización de procesos e hilos
- Implementación estructural de la sincronización
- Especificidades de la implementación multihilo en el enfoque orientado a objetos (el papel del patrón RAII)
Modelo de memoria en C++
- Objetos y ubicaciones en memoria
- Ordenación 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 C++14 y versiones posteriores
- Clase std::thread y ejecución de hilos
- Identificación del hilo
- Vinculación y desvinculación del hilo
- Hilos y contenedores estándar
- Gestión de excepciones en C++14 (hilos)
Exclusión mutua y secciones críticas
- Principios básicos de la exclusión mutua
- Conceptos (tipos) de objetos bloqueantes disponibles
- Rápida introducción al manejo del tiempo en C++14 (biblioteca chrono)
- Clases std::mutex, std::timed_mutex, std::shared_mutex y sus derivadas
- Patrón RAII en el manejo de bloqueos (std::lock_guard, std::unique_lock)
- Bloqueos perezosos y diferidos (std::lock)
- Propiedad y corresponsabilidad de bloqueos e hilos
- Problema lectores-escritores
- Inicialización única
- Memoria local (privada) del hilo (en inglés: std::thread_local)
Bloqueos y sincronización de hilos
- Operaciones con semáforos
- Bloqueos recursivos
- Bloqueos definidos por nivel de bloqueo
- Variables de decisión y cooperación con bloqueos
- Implementación de barreras activas e inactivas (en inglés: Idle Waits, Busy Waits)
- Reanudación de la ejecución de hilos
- Comunicación entre hilos (modelo Actor y CSP)
Tareas asíncronas
- Eventos asíncronos y su manejo
- Futuros (en inglés: future)
- Promesas (en inglés: promise)
- Tareas preparadas (en inglés: 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
Especificidades del diseño de APIs multihilo
- Diseño de estructuras mediante bloqueos: bloqueos granulares gruesos y finos
- Rendimiento del código concurrente: técnicas de estimación y medición
- Particionamiento de datos
- Escalabilidad de las soluciones
- Gestión de errores y situaciones excepcionales en la arquitectura de aplicaciones
Pruebas y depuración de aplicaciones multihilo
- Revisiones de código con enfoque en operaciones multihilo
- Especificidades de las pruebas de aplicaciones multihilo
- Pruebas unitarias
- Aumento de la probabilidad de situaciones de error para mejorar las pruebas
- Métodos formales de pruebas de aplicaciones multihilo
- Patrones de arquitectura de aplicaciones multihilo: pruebas y depuración (repaso)
Gestión avanzada de hilos
- Hilos dependientes (patrón Saga)
- Evitar la contención en el acceso a datos
- Parada controlada e interrupción de hilos
- Interrupción de llamadas bloqueantes
- Gestión de interrupciones
- Robo de tareas
- Interrupción de tareas durante la finalización de la aplicación
Patrones de diseño multihilo
- Tipos y objetivos de los patrones multihilo
- Alcance de aplicación de los patrones
- Grupo de hilos (en inglés: Thread Pool)
- Patrón de objeto activo (en inglés: Active Object)
- Cola segura para entornos multihilo (en inglés: Thread Safe Queue)
- Patrón productor-consumidor (en inglés: Producer Consumer)
- Patrón monitor (en inglés: Monitor)
- Seguridad multihilo de los patrones GoF
Requerimientos
- Habilidad para utilizar herramientas de construcción de software en C++ en entornos GNU/Linux y/o MS Windows.
- Conocimiento de programación en C++ (paradigma procedural y orientado a objetos) a nivel intermedio y avanzado.
- Conocimiento de técnicas de generació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