C11 future

std::promise

promise 是一个类模板,模板参数便是产出值的类型。同样的,future 也是一个类模板,模板参数是获取的值的类型。

std::promise<_data> data_promise; //创建一个承诺
std::future<_data> data_future = data_promise.get_future(); //得到这个承诺封装好的期望

future 的 get() 方法是阻塞的,直到其他任何人调用了 set_value() 方法,相当于封装了mutex与condition。

std::packaged_task

packaged_task 也是一个类模板。get_future()获取线程返回值。

	std::packaged_task<_data()> prepare_data_task([]()->_data{
		std::this_thread::sleep_for(std::chrono::seconds(2));    //模拟数据生产过程
 
		return{ 1 };
	});
	auto data_future = prepare_data_task.get_future();          //获取future

future 的 get() 方法是阻塞的,相当于封装了join。

注意future.get()只能被调用一次,多次调用会触发异常, 如果想要在多个线程中多次获取产出值请查阅 shared_future。
感觉future是用来处理一个生产者与一个消费者的异步操作,不适合多个消费者线程的场景。

std::async

封装一个异步操作,省却了起线程、互斥锁、条件。

	std::future<_data> data_future = std::async(std::launch::async, []()->_data{
		std::this_thread::sleep_for(std::chrono::seconds(1));           //模拟生产过程
		return { 1 };
	});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值