Espacios de nombres
Variantes
Acciones

std::shared_future

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
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
shared_future
(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 <future>
template<class T >class shared_future;
(1) (desde C++11)
template<class T >class shared_future<T&>;
(2) (desde C++11)
template<>          class shared_future<void>;
(3) (desde C++11)

La plantilla de clase std::shared_future proporciona un mecanismo para acceder al resultado de las operaciones asincrónicas, similar a std::future, excepto que se permite que varios hilos esperen el mismo estado compartido . A diferencia de std::future, que solo es movible (por lo que solo una instancia puede hacer referencia a un resultado asincrónico en particular), std::shared_future es copiable y varios objetos std::shared_future pueden hacer referencia al mismo estado compartido.

El acceso al mismo estado compartido desde múltiples subprocesos es seguro si cada hilo lo hace a través de su propia copia de un objeto shared_future.

Contenido

[editar]Funciones miembro

Construye el objeto futuro.
(función miembro pública)[editar]
Destruye el objeto std::shared_future.
(función miembro pública)
Asigna el contenido.
(función miembro pública)
Obtener el resultado
Devuelve el resultado.
(función miembro pública)[editar]
Estado
Comprueba si el objeto futuro tiene un estado compartido.
(función miembro pública)[editar]
Espera a que el resultado esté disponible.
(función miembro pública)[editar]
Espera el resultado, regresa si no está disponible durante el tiempo de espera especificado.
(función miembro pública)[editar]
Espera el resultado, regresa si no está disponible hasta que se haya alcanzado el punto de tiempo especificado.
(función miembro pública)[editar]

[editar]Ejemplo

Un objeto shared_future puede usarse para mandar una señal a varios hilos simultáneamente, similar a std::condition_variable::notify_all()

#include <iostream>#include <future>#include <chrono>   int main(){std::promise<void> ready_promise, t1_ready_promise, t2_ready_promise; std::shared_future<void> ready_future(ready_promise.get_future());   std::chrono::time_point<std::chrono::high_resolution_clock> start;   auto fun1 =[&, ready_future]()->std::chrono::duration<double, std::milli>{ t1_ready_promise.set_value(); ready_future.wait();// espera a la señal de main()returnstd::chrono::high_resolution_clock::now()- start;};     auto fun2 =[&, ready_future]()->std::chrono::duration<double, std::milli>{ t2_ready_promise.set_value(); ready_future.wait();// espera a la señal de main()returnstd::chrono::high_resolution_clock::now()- start;};   auto fut1 = t1_ready_promise.get_future();auto fut2 = t2_ready_promise.get_future();   auto result1 =std::async(std::launch::async, fun1);auto result2 =std::async(std::launch::async, fun2);   // espera a que los hilos estén listos fut1.wait(); fut2.wait();   // los hilos están listos, iniciar el reloj start =std::chrono::high_resolution_clock::now();   // mandar una señal a los hilos para que inicien ready_promise.set_value();   std::cout<<"Hilo 1 recibió la señal "<< result1.get().count()<<" ms después del inicio\n"<<"Hilo 2 recibió la señal "<< result2.get().count()<<" ms después del inicio\n";}

Posible salida:

Hilo 1 recibió la señal 0.072 ms después del inicio Hilo 2 recibió la señal 0.041 ms después del inicio

[editar]Véase también

(C++11)
Ejecuta una función asíncronamente (posiblemente en un nuevo hilo) y devuelve un std::future que contendrá el resultado.
(plantilla de función)[editar]
(C++11)
Espera a un valor que se establece asíncronamente.
(plantilla de clase)[editar]
close