Espacios de nombres
Variantes
Acciones

std::latch

De cppreference.com
< cpp‎ | thread
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
latch
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
Recuperación segura
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
Definido en el archivo de encabezado <latch>
class latch;
(desde C++20)

La clase latch (pestillo) es un contador descendente de tipo std::ptrdiff_t que puede ser utilizado para sincronizar hilos. El valor del contador se inicializa en la creación. Los hilos pueden bloquearse en el pestillo hasta que el contador se reduzca a cero. No hay posibilidad de aumentar o restablecer el contador, lo que hace que el pestillo sea de una barrera de un solo uso.

Las invocaciones simultáneas de las funciones miembro de std::latch, a excepción del destructor, no introducen carreras de datos.

A diferencia de std::barrier, un hilo participante puede disminuir std::latch más de una vez.

Contenido

[editar]Funciones miembro

Construye un objeto latch (pestillo)
(función miembro pública)[editar]
Destruye el objeto latch (pestillo)
(función miembro pública)[editar]
operator=
[eliminada]
latch no es asignable.
(función miembro pública)
Decrementa el contador de una manera sin bloqueo
(función miembro pública)[editar]
Prueba si el contador interno es igual a cero
(función miembro pública)[editar]
Se bloquea hasta que el contador alcanza cero
(función miembro pública)[editar]
Decrementa el contador y se bloquea hasta alcanzar cero
(función miembro pública)[editar]
Constantes
[estático]
El valor máximo del contador soportado por la implementación
(función miembro estática pública)[editar]

[editar]Ejemplo

#include <functional>#include <iostream>#include <latch>#include <string>#include <thread>   int main(){struct job {conststd::string name;std::string product{"no ha trabajado"};std::thread action{};} jobs[]={{"Ana"}, {"Beto"}, {"Carlos"}};   std::latch work_done{std::size(jobs)}; std::latch start_clean_up{1};   auto work =[&](job& my_job){ my_job.product= my_job.name+" ha trabajado"; work_done.count_down(); start_clean_up.wait(); my_job.product= my_job.name+" ha limpiado";};   std::cout<<"Trabajo iniciando... ";for(auto& job : jobs){ job.action=std::thread{work, std::ref(job)};} work_done.wait();std::cout<<"listo:\n";for(autoconst& job : jobs){std::cout<<" "<< job.product<<'\n';}   std::cout<<"Trabajadores limpiando... "; start_clean_up.count_down();for(auto& job : jobs){ job.action.join();}std::cout<<"listo:\n";for(autoconst& job : jobs){std::cout<<" "<< job.product<<'\n';}}

Salida:

Trabajo iniciando... listo: Ana ha trabajado Beto ha trabajado Carlos ha trabajado Trabajadores limpiando... listo: Ana ha limpiado Beto ha limpiado Carlos ha limpiado

[editar]Véase también

(C++20)
Barrera de hilos reutilizable.
(plantilla de clase)[editar]
close