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

Número de participantes


Precio por participante

Reseñas (1)

Próximos cursos

Categorías Relacionadas