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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM