Ponte en Contacto
 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)

Número de participantes


Precio por participante

Reseñas (1)

Próximos cursos

Categorías Relacionadas