首页 > 编程语言 > 详细

c/c++ 多线程 多个线程等待同一个线程的一次性事件

时间:2018-11-27 22:45:23      阅读:423      评论:0      收藏:0      [点我收藏+]

多线程 多个线程等待一个线程的一次性事件

背景:从多个线程访问同一个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

c/c++ 多线程 多个线程等待同一个线程的一次性事件

原文:https://www.cnblogs.com/xiaoshiwang/p/10029493.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!