future/promise
1 来源
需要从线程中返回异步任务结果情形时,c++11之前:
使用指针在线程间共享数据。
传递一个指针到新的线程中,该线程在其中设置数据,直到主线程继续等待使用条件变量。当新线程设置数据并通知条件变量时,主线程将唤醒并从指针处获取数据;
示例:
void fun(int x, int y, int *ans)
{std::cout << "proc thread: " << std::hex << std::this_thread::get_id() << std::endl;*ans = x + y;
}void test_future()
{std::cout << "main thread: " << std::hex << std::this_thread::get_id() << std::endl;int a{10};int b{8};int sum{};std::thread t(fun, a, b, &sum);t.join();std::cout << "sum: " << sum << std::endl;return;
}
std::future
C++11提供future类模板,future对象提供访问异步操作结果的机制。
分类
唯一期望(unique futures, std::future<>)实例只能与一个指定事件相关联;
共享期望(shared futures, std::shared_future<>)实例能关联多个事件
一个std::future对象在内部存储一个将来会被某个provider赋值的值,并提供一个访问该值的机制,通过get()成员函数实现。在get可用前访问,会被阻塞,直至该值可用。
N 参考资料
https://www.cnblogs.com/linuxAndMcu/p/14577275.html