C++多线程编程之std::future

C++多线程编程之std::future

1. std::future

std::future 通常由某个 Provider 创建,你可以把 Provider 想象成一个异步任务的提供者,Provider 在某个线程中设置共享状态的值,与该共享状态相关联的 std::future 对象调用 get(通常在另外一个线程中) 获取该值。如果共享状态的标志不为 还没有被 Provider 设置,则调用 std::future::get() 会阻塞当前的调用者,直到 Provider 设置了共享状态的值,std::future::get() 返回异步任务的值异常(如果发生了异常)。一句话概括,std::future是为了线程间传递数据使用的。
一共有三种 Provider:

  1. std::async
  2. std::promise调用get_future()函数
  3. std::packaged_task调用get_future()函数

提示,std::future独占资源,类似unique_ptr,不可被拷贝。接下来看下三种 Provider 的用法。

2. std::async

先看一段代码:

#include <iostream>
#include <thread>
#include <future>
#include <chrono>

int main() {
   
   
    std::future<int> fu = std::async([](int a, int b) {
   
   
        std::cout << "thread start!" << std::endl;
        return a + b;
    }, 10, 20);

    std::this_thread::sleep_for(std::chrono::milliseconds(2000));
    int res = fu.get();
    std::cout << "res=" << res << std::endl;
}

编译的时候需要链接pthread库。
运行结果:在这里插入图片描述
运行后立刻出现"thread start!"的字样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值