Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::shared_future

      From cppreference.com
      <cpp‎ |thread
       
       
      Concurrency support library
      Threads
      (C++11)
      (C++20)
      this_thread namespace
      (C++11)
      (C++11)
      (C++11)
      Cooperative cancellation
      Mutual exclusion
      Generic lock management
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      Condition variables
      (C++11)
      Semaphores
      Latches and Barriers
      (C++20)
      (C++20)
      Futures
      (C++11)
      (C++11)
      shared_future
      (C++11)
      (C++11)
      Safe reclamation
      Hazard pointers
      Atomic types
      (C++11)
      (C++20)
      Initialization of atomic types
      (C++11)(deprecated in C++20)
      (C++11)(deprecated in C++20)
      Memory ordering
      (C++11)(deprecated in C++26)
      Free functions for atomic operations
      Free functions for atomic flags
       
       
      Defined in header<future>
      template<class T>class shared_future;
      (1)(since C++11)
      template<class T>class shared_future<T&>;
      (2)(since C++11)
      template<>class shared_future<void>;
      (3)(since C++11)

      The class templatestd::shared_future provides a mechanism to access the result of asynchronous operations, similar tostd::future, except that multiple threads are allowed to wait for the same shared state. Unlikestd::future, which is only moveable (so only one instance can refer to any particular asynchronous result),std::shared_future is copyable and multiple shared future objects may refer to the same shared state.

      Access to the same shared state from multiple threads is safe if each thread does it through its own copy of ashared_future object.

      Contents

      [edit]Member functions

      constructs the future object
      (public member function)[edit]
      destructs the future object
      (public member function)
      assigns the contents
      (public member function)
      Getting the result
      returns the result
      (public member function)[edit]
      State
      checks if the future has a shared state
      (public member function)[edit]
      waits for the result to become available
      (public member function)[edit]
      waits for the result, returns if it is not available for the specified timeout duration
      (public member function)[edit]
      waits for the result, returns if it is not available until specified time point has been reached
      (public member function)[edit]

      [edit]Example

      Ashared_future may be used to signal multiple threads simultaneously, similar tostd::condition_variable::notify_all().

      Run this code
      #include <chrono>#include <future>#include <iostream> 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();// waits for the signal from 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();// waits for the signal from 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); // wait for the threads to become ready    fut1.wait();    fut2.wait(); // the threads are ready, start the clock    start=std::chrono::high_resolution_clock::now(); // signal the threads to go    ready_promise.set_value(); std::cout<<"Thread 1 received the signal "<< result1.get().count()<<" ms after start\n"<<"Thread 2 received the signal "<< result2.get().count()<<" ms after start\n";}

      Possible output:

      Thread 1 received the signal 0.072 ms after startThread 2 received the signal 0.041 ms after start

      [edit]See also

      (C++11)
      runs a function asynchronously (potentially in a new thread) and returns astd::future that will hold the result
      (function template)[edit]
      (C++11)
      waits for a value that is set asynchronously
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/thread/shared_future&oldid=161220"

      [8]ページ先頭

      ©2009-2025 Movatter.jp