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

Número de participantes


Precio por participante

Reseñas (1)

Próximos cursos

Categorías Relacionadas