Acerca de la serie 'Programación concurrente'

Última actualización del anuncio: 2 de septiembre de 2021.

La serie de artículos del blog centrada en la programación concurrente con C++, publicada originalmente en 2016, ha sido revisada y ampliada con el fin de dar cabida a nuevas funcionalidades introducidas por los estándares C++17 y C++20. En particular, sus textos y códigos han sido reescritos siempre que ha sido necesario con el fin de garantizar tanto el rigor de los contenidos como una narrativa coherente.

A los cinco primeros artículos de la serie se suman ahora tres nuevos posts centrados en los hilos std::jthread cooperativamente interrumpibles (C++20), la implementación de colas concurrentes y un ejercicio resuelto de paralelización en el contexto de la gestión de información sobre directorios:

  1. Introducción básica: clase std::thread y función std::async
  2. Paralelización de algoritmos
  3. Comprendiendo std::async en más detalle
  4. ¿Cómo funciona std::packaged_task?
  5. Mecanismo de exclusión mutua (mutex)
  6. std::jthread: hilo cooperativamente interrumpible
  7. Queue sincronizado
  8. Ejercicio resuelto de paralelización
La serie seguirá siendo extendida en el futuro a través de nuevos artículos.

Programación concurrente (VII): Queue sincronizado

  Artículos de la serie:


Queue sincronizado


Última actualización del post: 28 de agosto de 2021.

Detalle de 'The Queue at the Fish-shop'
(1944) por Evelyn M. Dunbar
https://en.wikipedia.org/wiki/Evelyn_Dunbar
En este artículo analizaremos la implementación segura bajo hilos (thread-safe) de una estructura de datos tipo cola (queue). Para ello, emplearemos dos primitivas de sincronización disponibles a partir del estándar C++11:
  • std::mutex, que permite proteger a una variable compartida del intento de acceso simultáneo por parte de múltiples hilos (véase el quinto artículo de esta serie para más detalles, así como [1]).
  • std::condition_variable, que permite bloquear uno o más hilos de ejecución hasta que otro hilo modifique una variable compartida y notifique dicha acción. Sus funciones miembro públicas notify_one y notify_all permiten desbloquear, respectivamente, uno solo de los hilos en espera o bien todos los hilos bloqueados [2].

Programando con C++20 (parte IV): std::jthread

Artículos de la serie 'Programando con C++20': Artículos de la serie 'Programación concurrente':
  1. Concepts
  2. Lambdas 'templatizadas'
  3. Funciones std::erase y std::erase_if
  4. std::jthread
  5. CPOs (customization point objects)
  1. Introducción básica: clase std::thread y función std::async
  2. Paralelización de algoritmos
  3. Comprendiendo std::async en más detalle
  4. ¿Cómo funciona std::packaged_task?
  5. Mecanismo de exclusión mutua (mutex)
  6. std::jthread: hilo cooperativamente interrumpible
  7. Queue sincronizado
  8. Ejercicio resuelto de paralelización

Última actualización del artículo: 31 de agosto de 2021.

El estándar C++20 proporciona un nuevo hilo cooperativamente interrumpible llamado std::jthread [1]. Éste dispone de la misma funcionalidad que la clase std::thread (véase el primer artículo de esta serie), pero añade las habilidades adicionales de:

  • Realizar su unión (join) automáticamente durante su destrucción.
  • Permitir que se solicite su cancelación.