C++11并发(一)

C++11并发(一)

  • 头文件
#include<thread>//线程头文件
#include<chrono>//时间相关函数
  • 高级接口
std::future<int> result1(std::async(func1));
int result2=func2();
int resulit=result1.get()+result2;

func1()在不支持线程或无线程可用时,通过get()会同步执行,否则益步执行。
要遵循 call early and return late。
launch策略有 std::launch::async(不赋值给future会停滞,future销毁前会执行完后台)和std::launch::deferred(延缓直至get())。

future1.wait_for(std::chrono::seconds(10));
future2.wait_until(std::system_clock::now()+std::chrono::minutes(1));
//返回 std::future_status::deferred\std::future_status::timeout\std::future_status::ready.

speculative execution(投机性运行)

int quickComputation();
int accurateCoputation();
std::future<int> f;

int bestResultInTime()
{
	auto tp=std::chrono::system_clock::now()+std::chrono::minutes(1);
	f=std::async(std::launch::async,accurateComputation);
	int guess=quikCoputation();
	std::future_status s=f.wait_until(tp);
	if(s==std::future_status::ready)
	{
		return f.get();
	}
	else
	{
		return guess;
	}
}

用类对象开线程

class A
{
	public:
		void mem(int num);
		...
};

A a;
auto f=std::async(&A::mem,a,3);
...
int tmp=f.get();

shared_future可以多次get(),自身也可以传递引用,注意shared_future对象本身的生命周期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值