这篇文章的作用是提取这一节中重要的精华。
0、cond_v
没啥好说的。用wait做锁和cpu的让出,和单纯的等待条件满足
---------------
1、future<T>fu=async(fu);
启动一个线程做异步任务;或者直接执行任务,同步。可选
以函数的return作为阻塞get()结束的标志
-----
2、package_task<T()> task(fn);
task();
把一个任务包装。可以被future获取 fu=task.get_future();
fu.get()阻塞,等待fn结束,接收返回结果
以函数的return作为阻塞结束的标志
-------
3、promise<T> p;
future<T> fu=p.get_future();建立promise和future的联系
过程中p.set_value(val)可以通知建立联系的fu.get()
set_value()作为阻塞结束的标志
有点像cond_v,但cond_v不能传递消息
//注意这些阻塞都是在多线程下的
#include<future>
#include<iostream>
#include<chrono>
#include<thread>
using namespace std;
void go(promise<int>&p){
for(int i=0;i<1000000000;i++){
if(i==600){
p.set_value(9);
}
}
cout<<"done"<<endl;
}
int main(){
promise<int> p;
future<int> fu=p.get_future();
thread t(go,ref(p));
cout<<fu.get()<<endl;
return 0;
}
主线程在get()后结束。此时新线程还没结束。因为只阻塞到get()