C++并发(二)

C++并发(二)

C++并发(一)

  • 低级接口thread和promise与高级接口的区别
    thread对象没有发射策略,尽量开启新线程。
    没有接口获取线程结果,只有线程ID。
    必须用exception_ptr导出异常,否则一旦线程异常溢出,程序terminate()。
    线程必须join()或者detach(),否则terminate(),线程发生移动分配,一样terminate().
    线程在main()结束前未终止,强行终止。
  • thread

quick_exit()结束程序时不析构global和static 对象,保留detach线程要访问的资源安全性。
线程启动时存储线程ID以识别线程

std::thread::id thred1_ID;
std::thread thred1(doSomething);
thread1_ID=thred1.get_id();
  • promise
    promise与thread配合
int main()
{
	try
	{
		std::promise<std::string>p;
		std::thread t(doSomething,std::ref(p));
		t.detach;
		std::future<std::string>f(p.get_future());
		do something aboult f;
	}
	catch(const std::exception&e)
	{
		...
	}
	catch(...)
	{
		...
	}
}

p.set_value();
p.set_exception();
//两者只能set一个,否则报错,ready时线程不一定结束
//若想要线程结束时才ready,如下
p.set_value_at_thread_exit();
p.set_exception_at_thread_exit();
  • packaged_task,运行多个类似后台任务
double compute(int x,int y);
std::packaged_task<double(int,int)>task(compute);
std::future<double> f=task.get_future();
task(3,4);
double tmp=f.get();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值