Ponte en Contacto
 Duración 28 horas

Temario del curso

Desafíos y problemas de concurrente

  • Limitaciones de hardware en plataformas - hilos de hardware, pipes, coherencia de caché
  • Conceptos fundamentales relacionados con programación multi-thread (corrección de programas multi-thread, liveness, starvation, deadlocks, race conditions, atomicidad, modelos de coherencia, taxonomía de Flynn)
  • Mecanismos disponibles en C++ para implementar multi-thread y multiproceso
  • Implementación de la biblioteca estándar desde C++14 hasta hoy (C++2a)
  • Implementación disponible en Boost - diferencias respecto a la biblioteca estándar

Procesos y hilos

  • Aplicaciones multiproceso versus multi-thread
  • Sistema operativo e hilos (breve resumen de implementaciones disponibles)
  • Mecanismos de sincronización entre procesos y hilos
  • Implementación estructural de la sincronización
  • Especificidad de implementación de multi-thread en enfoque orientado a objetos (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 respecto 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 y ejecución de hilos
  • Identificación de hilo
  • Anclaje y desanclaje de hilos
  • Hilos y contenedores estándar
  • Gestión de excepciones en C++14 para hilos

Exclusión mutua y secciones críticas

  • Reglas simples de exclusión mutua
  • Conceptos (tipos) de objetos bloqueantes disponibles
  • Introducción rápida al manejo de tiempo en C++14 (librería chrono)
  • Clases std::mutex, std::timed_mutex, std::shared_mutex y derivadas
  • Patrón RAII en manejo de locks (std::lock_guard, std::unique_lock)
  • Locks dependientes y pospuestos (std::lock)
  • Propiedad y co-propiedad de locks e hilos
  • Problema lectores-escritores
  • Inicialización única
  • Memoria local (privada) de hilo (std::thread_local)

Locks y sincronización de hilos

  • Operaciones con semáforos
  • Locks recursivos
  • Locks con definición de nivel de bloqueo
  • Variables de decisión y colaboración con locks
  • Implementación de barreras activas y pasivas (Idle Waits, Busy Waits)
  • Reinicio de hilos
  • Comunicación entre hilos (modelo Actora y CSP)

Tareas asíncronas

  • Eventos asíncronos y su manejo
  • Futuros
  • 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 auxiliares (libres) de tipos std::atomic

Especificidades del diseño de API multi-thread

  • Diseño de estructuras usando locks - locks granulares finos y gruesos
  • 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 multi-thread

  • Revisiones de código enfocadas en operaciones multi-thread
  • Especificidades de pruebas de aplicaciones multi-thread
  • Pruebas unitarias
  • Aumentar la probabilidad de situaciones excepcionales para las pruebas
  • Métodos formales de prueba de aplicaciones multi-thread
  • Patrones de arquitectura de aplicaciones multi-thread y su relación con pruebas y depuración (resumen)

Gestión avanzada de hilos

  • Hilos dependientes (patrón Saga)
  • Evitar competencia por acceso a datos
  • Controlado stop e interrupción de hilos
  • Interrupción de llamadas bloqueantes
  • Manejo de interrupciones
  • Robo de tareas
  • Interrupción de tareas durante el cierre de aplicaciones

Patrones de diseño multi-thread

  • Tipos y propósitos de patrones multi-thread
  • Rango de aplicación de los patrones
  • Pools de hilos (Thread Pool)
  • Patrón objeto activo (Active Object)
  • Cola segura multi-thread (Thread Safe Queue)
  • Patrón productor-consumidor (Producer Consumer)
  • Patrón monitor (Monitor)
  • Seguridad multi-thread de patrones GoF

Requerimientos

  • Habilidad para utilizar herramientas de compilació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 avanzado e intermedio
  • Conocimiento de creación de código genérico (plantillas)

Número de participantes


Precio por participante

Reseñas (1)

Próximos cursos

Categorías Relacionadas