Advertisement
RobertDeMilo

BB4.7 shared_ptr и многопоточность

Jun 21st, 2024
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <memory>
  2. #include <sstream>
  3. #include <string>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. class Data
  8. {
  9.     public:
  10.    
  11.     Data(string data): data_(data)
  12.     {
  13.         cout << "Data constructed\n";
  14.     }
  15.    
  16.     ~Data()
  17.     {
  18.          cout << "Data destructed\n";
  19.     }
  20.    
  21.     const string& Get() const
  22.     {
  23.         return data_;    
  24.     }
  25.    
  26.     string& Get()
  27.     {
  28.         return data_;    
  29.     }
  30.    
  31.     private:
  32.     string data_;
  33. };
  34.  
  35. void ShareResource(shared_ptr<const Data> ptr)
  36. {
  37.     stringstream ss;
  38.    
  39.     ss << "Shared resource " << ptr->Get() << " in " << this_thread::get_id() << ", counter = " << ptr.use_count() << endl;
  40.    
  41.     cout << ss.str();
  42.    
  43.     //ptr->Get().push_back('x');
  44. }
  45.  
  46. vector<future<void>> spawn() {
  47.     vector<future<void>> tasks;
  48.  
  49.     auto data = make_shared<const Data>("meow"); // Create shared_ptr
  50.  
  51.     for (int i = 0; i < 10; ++i) {
  52.         tasks.push_back(async([data]() { // Capture shared_ptr by copy
  53.             ShareResource(data);
  54.         }));
  55.     }
  56.  
  57.     return tasks;
  58. }
  59.  
  60. int main()
  61. {
  62.     cout << "Spawning tasks...\n";
  63.     auto tasks = spawn();
  64.     cout << "Done spawning.\n";
  65.    
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement