C++11中的异步操作

本文介绍了C++11中的异步操作,包括std::future、std::async、std::promise和std::packaged_task。异步操作允许主线程无需等待,避免额外线程负担和死锁。std::future作为底层对象,std::async是其高级封装,提供异步任务创建。std::promise和std::packaged_task则提供了线程间的同步机制。
摘要由CSDN通过智能技术生成

       异步操作的主要目的是让调用方法的主线程不需要同步等待调用函数,从而可以让主线程继续执行它下面的代码。因此异步操作无须额外的线程负担,使用回调的方式进行处理。在设计良好的情况下,处理函数可以不必或者减少使用共享变量,减少了死锁的可能。当需要执行I/O操作时,使用异步操作比使用线程+同步 I/O操作更合适。

       异步和多线程并不是一个同等关系,异步是目的,多线程是实现异步的一个手段。实现异步可以采用多线程或交给另外的进程来处理。

      C++11中的异步操作主要有std::future、std::async、std::promise、std::packaged_task。

 

1、std::future

        future对象是std::async、std::promise、std::packaged_task的底层对象,用来传递其他线程中操作的数据结果。

函数原型:

#include <future>
template< class T >  class future;
template< class T >  class future<T&>;
template<>        class future<void>;

成员函数:

(构造函数)

构造 future 对象 (公开成员函数)

(析构函数)

析构 future 对象 (公开成员函数)

operator=

移动future对象 (公开成员函数)

share

从 *this 转移共享状态给 shared_future 并返回它 (公开成员函数)

获取结果

get

返回结果 (公开成员函数)

状态

valid

检查 future 是否拥有共享状态(公开成员函数)

wait

等待结果变得可用(公开成员函数)

wait_for

等待结果,如果在指定的超时间隔后仍然无法得到结果,则返回。

(公开成员函数)

wait_until

等待结果,如果在已经到达指定的时间点时仍然无法得到结果,则返回。 
(公开成员函数)

        类模板std::future提供访问异步操作结果的机制:

(1)通过 std::promise、std::packaged_task和std::async创建的异步操作能提供一个 std::future 对象给该异步操作的创建者。

(2)异步操作的创建者能用各种方法查询、等待或从 std::future 提取值。若异步操作仍未提供值,则这些方法可能阻塞。

(3)异步操作准备好发送结果给创建者时,它能通过修改链接到创建者的 std::future 的共享状态(例如 std::promise::set_value )进行。

注:

  • std::future 所引用的共享状态不与另一异步返回对象共享(与 std::shared_future 相反)。
  • std::asyanc是std::future的高级封装࿰
  • 15
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值