Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <future>
  3. #include <mutex>
  4. #include <vector>
  5. #include <cmath>
  6. #include <algorithm>
  7. #include <numeric>
  8.  
  9.  
  10. class RangeTimer
  11. {
  12.     decltype(std::chrono::system_clock::now()) start;
  13. public:
  14.     RangeTimer()
  15.     {
  16.         start = std::chrono::system_clock::now();
  17.     }
  18.     ~RangeTimer()
  19.     {
  20.         auto end = std::chrono::system_clock::now();
  21.         std::chrono::duration<double> elapsedTime = end - start;
  22.         std::cout << "range timer " << elapsedTime.count()<< " s\n";
  23.     }
  24. };
  25.  
  26. long long int f1()
  27. {
  28.     RangeTimer tim;
  29.     long long int tmp = 0;
  30.     for(int i = 0; i < 2e8; i++)
  31.         tmp += i;
  32.     return tmp;
  33.    /* std::vector<int> v;
  34.     for(int i = 0; i < 2e8; i++)
  35.         v.push_back(i);
  36.     return std::accumulate(v.begin(), v.end(), 0.);*/
  37. }
  38.  
  39. long long int f2()
  40. {
  41.     RangeTimer tim;
  42.     long long int wynik = 0;
  43.     std::mutex m;
  44.     std::future watek1 = std::async(std::launch::async, [&wynik, &m]()
  45.     {
  46.         long long int tmp = 0;
  47.         for(int i = 0; i < 1e8; i++)
  48.             tmp += i;
  49.         {
  50.             std::lock_guard _(m);
  51.             wynik += tmp;
  52.         }
  53.     });
  54.     {
  55.         long long int tmp = 0;
  56.         for(int i = 1e8; i < 2e8; i++)
  57.             tmp += i;
  58.         //m.lock();
  59.         wynik += tmp;
  60.         //m.unlock();
  61.     }
  62.     watek1.wait();
  63.     return wynik;
  64. }
  65.  
  66. long long int f4()
  67. {
  68.     RangeTimer tim;
  69.     long long int wynik = 0;
  70.     std::mutex m;
  71.     std::future watek1 = std::async(std::launch::async, [&wynik, &m]()
  72.     {
  73.         long long int tmp = 0;
  74.         for(int i = 0; i < 0.5e8; i++)
  75.             tmp += i;
  76.         {
  77.             //std::lock_guard _(m);
  78.             wynik += tmp;
  79.         }
  80.     });
  81.     std::future watek2 = std::async(std::launch::async, [&wynik, &m]()
  82.     {
  83.         long long int tmp = 0;
  84.         for(int i = 0.5e8; i < 1e8; i++)
  85.             tmp += i;
  86.         {
  87.             //std::lock_guard _(m);
  88.             wynik += tmp;
  89.         }
  90.     });
  91.     std::future watek3 = std::async(std::launch::async, [&wynik, &m]()
  92.     {
  93.         long long int tmp = 0;
  94.         for(int i = 1e8; i < 1.5e8; i++)
  95.             tmp += i;
  96.         {
  97.             //std::lock_guard _(m);
  98.             wynik += tmp;
  99.         }
  100.     });
  101.     {
  102.         long long int tmp = 0;
  103.         for(int i = 1.5e8; i < 2e8; i++)
  104.             tmp += i;
  105.         //m.lock();
  106.         wynik += tmp;
  107.         //m.unlock();
  108.     }
  109.     watek1.wait();
  110.     watek2.wait();
  111.     watek3.wait();
  112.     return wynik;
  113. }
  114. int main()
  115. {
  116.     long long int wynik = f1();
  117.     std::cout << wynik << "\n\n";
  118.  
  119.     long long int wynik2 = f2();
  120.     std::cout << wynik2 << "\n\n";
  121.  
  122.     long long int wynik4 = f4();
  123.     std::cout << wynik4 << std::endl;
  124.  
  125.     return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement