Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <future>
- #include <mutex>
- #include <vector>
- #include <cmath>
- #include <algorithm>
- #include <numeric>
- class RangeTimer
- {
- decltype(std::chrono::system_clock::now()) start;
- public:
- RangeTimer()
- {
- start = std::chrono::system_clock::now();
- }
- ~RangeTimer()
- {
- auto end = std::chrono::system_clock::now();
- std::chrono::duration<double> elapsedTime = end - start;
- std::cout << "range timer " << elapsedTime.count()<< " s\n";
- }
- };
- long long int f1()
- {
- RangeTimer tim;
- long long int tmp = 0;
- for(int i = 0; i < 2e8; i++)
- tmp += i;
- return tmp;
- /* std::vector<int> v;
- for(int i = 0; i < 2e8; i++)
- v.push_back(i);
- return std::accumulate(v.begin(), v.end(), 0.);*/
- }
- long long int f2()
- {
- RangeTimer tim;
- long long int wynik = 0;
- std::mutex m;
- std::future watek1 = std::async(std::launch::async, [&wynik, &m]()
- {
- long long int tmp = 0;
- for(int i = 0; i < 1e8; i++)
- tmp += i;
- {
- std::lock_guard _(m);
- wynik += tmp;
- }
- });
- {
- long long int tmp = 0;
- for(int i = 1e8; i < 2e8; i++)
- tmp += i;
- //m.lock();
- wynik += tmp;
- //m.unlock();
- }
- watek1.wait();
- return wynik;
- }
- long long int f4()
- {
- RangeTimer tim;
- long long int wynik = 0;
- std::mutex m;
- std::future watek1 = std::async(std::launch::async, [&wynik, &m]()
- {
- long long int tmp = 0;
- for(int i = 0; i < 0.5e8; i++)
- tmp += i;
- {
- //std::lock_guard _(m);
- wynik += tmp;
- }
- });
- std::future watek2 = std::async(std::launch::async, [&wynik, &m]()
- {
- long long int tmp = 0;
- for(int i = 0.5e8; i < 1e8; i++)
- tmp += i;
- {
- //std::lock_guard _(m);
- wynik += tmp;
- }
- });
- std::future watek3 = std::async(std::launch::async, [&wynik, &m]()
- {
- long long int tmp = 0;
- for(int i = 1e8; i < 1.5e8; i++)
- tmp += i;
- {
- //std::lock_guard _(m);
- wynik += tmp;
- }
- });
- {
- long long int tmp = 0;
- for(int i = 1.5e8; i < 2e8; i++)
- tmp += i;
- //m.lock();
- wynik += tmp;
- //m.unlock();
- }
- watek1.wait();
- watek2.wait();
- watek3.wait();
- return wynik;
- }
- int main()
- {
- long long int wynik = f1();
- std::cout << wynik << "\n\n";
- long long int wynik2 = f2();
- std::cout << wynik2 << "\n\n";
- long long int wynik4 = f4();
- std::cout << wynik4 << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement