Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <conio.h>
- #include <vector>
- #include <Windows.h>
- #include <thread>
- #include <mutex>
- using namespace std;
- mutex barrier;
- void oblicz(double &pi, long long L, long long R)
- {
- //long long n = 0;
- //double licz_pi = 0;
- for (long long i = L; i < R; ++i)
- {
- //barrier.lock();
- lock_guard<mutex> block_threads_until_finish_this_job(barrier);
- if (i % 2 == 0)
- pi += 1.0 / (2.0 * i + 1.0);
- else pi += -1.0 / (2.0 * i + 1.0);
- //n++;
- /*if (n > stop)
- {
- break;
- }*/
- //pi = licz_pi;
- //barrier.unlock();
- }
- //printf("%.16f\n", pi * 4);
- }
- int main()
- {
- double pi = 0;
- int czasA = 0, czasB = 0, ile = 1;
- unsigned long long ilosc1 = 100000000, ilosc2 = 50000000, ilosc3 = 100000000; //100 000 000
- vector<thread> v;
- vector<long long> v1;
- vector<long long> v2;
- printf("Ile watkow chcesz uzyc: ");
- scanf_s("%d", &ile);
- for (int i = 0; i < ile; i++)
- {
- v1.push_back((ilosc1 / ile) * i);
- v2.push_back((ilosc1 / ile) * (i + 1) - 1);
- }
- vector<double>v3(ile);
- czasA = GetTickCount();
- for(int i = 0; i < ile; i++)
- {
- v.push_back(thread(oblicz, ref(pi), v1.at(i), v2.at(i)));
- v.at(i).join();
- //v3.push_back(pi);
- }
- /*for (int i = 0; i < v3.size() - 1; i++)
- {
- pi += v3.at(i);
- }*/
- /*for (auto &t : v) {
- t.join();
- }*/
- /*for (int i = 0; i < v3.size() - 1; i++)
- {
- pi = v3.at(i);
- }*/
- //oblicz(pi, 0, 100000000);
- czasB = GetTickCount();
- printf("%.16f\n", pi * 4);
- printf("Czas wykonania zadania: %d ms", czasB - czasA);
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement