Programa del Curso

Desafíos y problemas de simultaneidad

  • Limitaciones de hardware de la plataforma: subprocesos de hardware, canalizaciones, coherencia de caché
  • Elementotros conceptos relacionados con la programación multihilo (corrección de un programa multihilo, viabilidad, inanición, interbloqueo, raza, atomicidad, modelos de coherencia, taxonomía de Flynn)
  • Mecanismos disponibles en C++ para implementar multithreading y multiprocessing
  • Implementación de la biblioteca estándar - Temas C++14 hasta la actualidad (C++2a)
  • Implementación disponible en Boost: diferencias con la biblioteca estándar

Procesos y subprocesos

  • Aplicaciones multiproceso vs. multiproceso
  • Sistema operativo frente a subprocesos (una breve descripción general de las implementaciones disponibles)
  • Mecanismos de sincronización de procesos y subprocesos
  • Implementación estructurada de la sincronización
  • Especificidad de la implementación de multithreading en el enfoque orientado a objetos (el papel del patrón RAII)

Modelo de memoria en el lenguaje C++

  • Objetos y ubicaciones de memoria
  • Programación y aplicación
  • Relaciones: sincronización, precedencia, ordenación de operaciones para acciones atómicas, secuencias de liberación
  • Barreras de memoria
  • Operaciones atómicas

Gestión de subprocesos en el estándar C++14 y posteriores

  • La clase std::thread y los subprocesos iniciales
  • Identificación de hilos
  • Unir y desconectar un hilo
  • Subprocesos frente a contenedores estándar
  • Control de excepciones en subprocesos C++14

Exclusión mutua y secciones críticas

  • Reglas simples de exclusión mutua
  • Conceptos (tipos) de objetos de bloqueo disponibles
  • Introducción rápida al manejo del tiempo en C++14 (biblioteca de cronos)
  • Las clases std::mutex, std::timed_mutex, std::shared_mutex y 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 cerraduras y roscas
  • El problema de los lectores-escritores
  • Inicialización única
  • Memoria local (privada) del subproceso (std::thread_local)

Bloqueos de subprocesos y sincronización

  • Operaciones de semáforo
  • Bloqueos recursivos
  • Bloqueos con una definición de nivel de bloqueo
  • Variables de decisión y cooperación de bloqueo
  • Implementación de esperas inactivas, esperas ocupadas
  • Reanudar hilos
  • Comunicación entre subprocesos (actor y modelo CSP)

Tareas asincrónicas

  • Eventos asincrónicos y su control
  • Futuro
  • Promesas
  • Tareas preparadas (packaged_task)

Tipos atómicos

  • Tipos atómicos estándar
  • Bandera atómica universal (std::atomic_flag)
  • La plantilla de clase std::atomic<T> y sus especializaciones
  • Funciones de utilidad (libres) de los tipos std::atomic

Detalles del diseño de API multiproceso

  • Diseño de estructuras con enclavamientos: enclavamientos de grano grueso y fino
  • Rendimiento de código concurrente: técnicas de estimación y medición
  • Particionamiento de datos
  • Escalabilidad de las soluciones
  • Control de errores y excepciones en la arquitectura de la aplicación

Prueba y depuración de aplicaciones multiproceso

  • Revisiones de código para operaciones multiproceso
  • Detalles de las pruebas de aplicaciones multiproceso
  • Pruebas unitarias
  • Aumentar la probabilidad de emergencias a favor de las pruebas
  • Métodos formales para probar aplicaciones multiproceso
  • Patrones de arquitectura de aplicaciones multiproceso y pruebas y depuración (información general)

Gestión avanzada de subprocesos

  • Hilos dependientes (patrón Saga)
  • Evitar la competencia en el acceso a los datos
  • Detención y anulación controlada de subprocesos
  • Interrumpir llamadas de bloqueo
  • Manejo de interrupciones
  • Robar tareas
  • Interrumpir tareas cuando finaliza una aplicación

Patrones de diseño de subprocesos múltiples

  • Tipos y propósito de los patrones multihilo
  • Ámbito de aplicación de las normas
  • Grupo de subprocesos
  • Patrón de objeto activo
  • Cola segura de subprocesos múltiples
  • Patrón Productor/Consumidor
  • Patrón de monitor
  • Seguridad de patrón multihilo GoF 

Requerimientos

  • Capacidad para utilizar herramientas para construir software en C++ en entorno GNU/Linux y/o MS Windows
  • Conocimiento de temas de programación en C++ (paradigma procedimental y orientado a objetos) en niveles avanzados e intermedios
  • Conocimientos de desarrollo de código generalizado (plantillas) 
 28 Horas

Número de participantes


Precio por Participante​

Testimonios (5)

Próximos cursos

Categorías Relacionadas