篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c/c++ 多线程 多个线程等待同一个线程的一次性事件相关的知识,希望对你有一定的参考价值。
多线程 多个线程等待一个线程的一次性事件
背景:从多个线程访问同一个std::future,也就是多个线程都在等待同一个线程的结果,这时怎么处理。
办法:由于std::future只能被调用一次get方法,也就是只能被某一个线程等待(同步)一次,不支持被多个线程等待。所以std::sharted_future,就应运而生了。
特点:std::sharted_future可以被复制,std::future是不可以的被复制的。
std::sharted_future的3种创建方式(fut为std::future):
1,std::shared_future<int> sf2(std::move(fut));
2,std::shared_future<int> sf2 = fut.share();
3,std::shared_future<int> sf1(pro.get_future());
代码:
#include <iostream>
#include <future>
int do_get_value() { return 10; }
void th1(std::shared_future<int> sf){
std::cout << sf.get() << std::endl;
}
void th2(std::shared_future<int> sf){
std::cout << sf.get() << std::endl;
}
int main(){
std::future<int> fut = std::async(do_get_value);
//std::shared_future<int> sf2(std::move(fut));
//std::shared_future<int> sf2 = fut.share();
//std::thread t1(th1, sf2);
//std::thread t2(th1, sf2);
//t1.join();
//t2.join();
std::promise<int> pro;
std::shared_future<int> sf1(pro.get_future());
std::thread t1(th1, sf1);
std::thread t2(th1, sf1);
pro.set_value(110);
t1.join();
t2.join();
}
github源代码
c/c++ 学习互助QQ群:877684253
本人微信:xiaoshitou5854