对于future的讲解可以去看这篇博客:std::future,那么对于future来说,因为它的get()函数中实现的是移动语义,所以对于future获取的值,只能get一次,那么如果有多个线程需要对其多次取值的话就需要用shared_future了。shared_future可以通过future对象,来将其转换成shared_future的对象,也可以直接通过shared_future来获取future值。
通过shared_future直接接收get_future返回的结果:
std::packaged_task<int(int)> t(fun);
std::thread t1(std::ref(t), 1);
std::shared_future<int> fu = t.get_future();
通过future传递:
std::packaged_task<int(int)> t(fun);
std::thread t1(std::ref(t), 1);
std::future<int> fu = t.get_future();
std::shared_future<int> fus = fu.share();
future.valid()这个函数可以判断当前的future是否有有效值,返回一个布尔类型的值。