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)
Testimonios (5)
Disfruté la flexibilidad y variedad de temas, la combinación de formaciones y ejercicios significó que pudiera aplicar lo aprendido inmediatamente. También disfruté los proyectos del último día para integrar todo lo aprendido.
Luca Ricagni - Rockwell Collins UK Limited
Curso - Advanced C++
Traducción Automática
El excelente nivel de conocimientos del instructor, la disposición y su amabilidad.
Luis Antonio Salazar Rivero - Banco de Mexico
Curso - C/C++ Secure Coding
Interactividad, momento para la programación autosuficiente. Aprendo más fácilmente si tengo la oportunidad de descubrir la respuesta por mí mismo y no solo que me la den. También fue muy positivo que el entrenamiento estuviera bien planificado, mantuvimos las pausas para café y el entrenamiento no perdió mi atención. El formador tenía un conocimiento muy profundo en C++, nos sentíamos cómodos preguntando cualquier cosa.
Barna Szecsi - GIS Europe SE
Curso - C++ for Embedded Systems
Traducción Automática
Los conocimientos del instructor.
Juan Jose Lopez Martinez - Banco de Mexico
Curso - Advanced C++ Software Design
Los detalles sobre cómo se comporta el compilador dependiendo del uso de la sintaxis. Las secciones "Quiz" son muy estimulantes.
Andrea Pomatto
Curso - Using C++ in Embedded Systems - Applying C++11/C++14
Traducción Automática