2. 利用futures等待一次性事件
C++标准库利用future来模塑一次性事件。如果某个线程需要等待某个事件发生,它可以获得一个future来代表那个事件。C++标准库中提供了两种future,这两个类模版均声明在<future>头文件中。
C++标准库提供了std::future<>和std::shared_future<>。
std::future<>类似unique_ptr, 拥有独占所有权,也即一个std::future可以拥有一个事件的所有权且只能由std::future拥有。
std::shared_future<>类似与shared_ptr, 意味着共享所有权,也即一个事件可以由多个shared_future实例拥有。
future仅仅提供了一种在线程间通信的方式,future对象本身仍然需要进行同步访问。如果多个线程需要去访问某个future对象,他们必须利用mutex或者其他同步机制对future对象进行互斥访问。
2.1 从后台线程返回值
在 C++并发编程--第二章--线程管理中,我们知道std::thread不能直接获得线程的返回值,而我们利用future和std::async函数模版可以达到该效果。
利用std::async可以开始一个你不需要立刻产生结果的异步任务。与std::thread对象不同,std::async通过future对象获得线程函数的返回值。当你需要值的时候,仅仅调用futur
本文介绍了C++中利用std::future进行并发编程,特别是如何通过std::async和std::packaged_task在后台线程获取返回值。std::future提供线程间通信,std::shared_future允许多个线程共享所有权。std::async启动异步任务,通过future的get()方法获取结果。std::packaged_task将future绑定到函数或可调用对象,调用实例时触发任务执行。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



