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 en plataformas: hilos de hardware, tuberías (pipes), coherencia de caché
- Conceptos elementales relacionados con la programación multiproceso (correción de programas multiproceso, livelock, deadlock, interbloqueo, race condition, atomicidad, modelos de consistencia, taxonomía de Flynn)
- Mecanismos disponibles en C++ para implementar el multiproceso y multiprocessing
- Implementación de la biblioteca estándar: elementos desde C++14 hasta la actualidad (C++2a)
- Implementación disponible en Boost - diferencias respecto a la biblioteca estándar
Procesos e hilos
- Aplicaciones multiproceso frente a aplicaciones multiproceso basadas en hilos
- Sistema operativo e hilos (visión general breve de las implementaciones disponibles)
- Mecanismos de sincronización de procesos e hilos
- Implementación estructural de la sincronización
- Especificidades de la implementación multiproceso en el enfoque orientado a objetos (papel del patrón RAII)
Modelo de memoria en C++
- Objetos y ubicaciones de memoria
- Programación de operaciones y su imposición
- Relaciones: de 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
- Unión y separación (detach) de hilos
- Hilos y contenedores estándar
- Gestión de excepciones en hilos con C++14
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 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 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 con semáforos
- Bloqueos recursivos
- Bloqueos definidos por el nivel de bloqueo
- Variables de decisión e interacción con bloqueos
- Implementación de barreras activas y pasivas (ang. Idle Waits, Busy Waits)
- Reanudación de la ejecución de los hilos
- Comunicación entre hilos (modelo Actor y CSP)
Tareas asíncronas
- Eventos asíncronos y su gestión
- 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 los tipos std::atomic
Especificidades del diseño de API multiproceso
- Diseño de estructuras usando bloqueos: bloqueos de grano grueso y fino
- 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 la aplicación
Pruebas y depuración de aplicaciones multiproceso
- Revisiones de código enfocadas en operaciones multiproceso
- Especificidades de las pruebas de aplicaciones multiproceso
- Pruebas unitarias
- Aumento de la probabilidad de situaciones de error para facilitar las pruebas
- Métodos formales de prueba de aplicaciones multiproceso
- Patrones de arquitectura de aplicaciones multiproceso frente a pruebas y depuración (visión general)
Gestión avanzada de hilos
- Hilos dependientes (patrón Saga)
- Evitación de la contención en el acceso a datos
- Detención controlada e interrupción del hilo
- Interrupción de llamadas bloqueantes
- Gestión de interrupciones
- Hurto de tareas
- Interrupción de tareas durante el cierre de la aplicación
Patrones de diseño multiproceso
- Tipos y propósito de los patrones multiproceso
- Ámbito de aplicación de los patrones
- Pool de hilos (ang. Thread Pool)
- Patrón Active Object
- Cola segura para multiproceso (ang. Thread Safe Queue)
- Patrón productor-consumidor (ang. Producer Consumer)
- Patrón Monitor
- Seguridad multiproceso en los patrones GoF
Requerimientos
- Habilidad para utilizar herramientas de construcción de software en C++ dentro del entorno GNU/Linux y/o MS Windows
- Conocimiento avanzado e intermedio de los temas de programación en C++ (paradigma procedural y orientado a objetos)
- Conocimiento de los temas de creación de código genérico (plantillas o templates)
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