Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <vector>
  5. #include <Windows.h>
  6. #include <thread>
  7. #include <mutex>
  8.  
  9. using namespace std;
  10.  
  11. mutex barrier;
  12.  
  13. void oblicz(double &pi, long long L, long long R)
  14. {
  15. //long long n = 0;
  16. //double licz_pi = 0;
  17. for (long long i = L; i < R; ++i)
  18. {
  19. //barrier.lock();
  20. lock_guard<mutex> block_threads_until_finish_this_job(barrier);
  21. if (i % 2 == 0)
  22. pi += 1.0 / (2.0 * i + 1.0);
  23. else pi += -1.0 / (2.0 * i + 1.0);
  24. //n++;
  25. /*if (n > stop)
  26. {
  27. break;
  28. }*/
  29.  
  30. //pi = licz_pi;
  31. //barrier.unlock();
  32. }
  33. //printf("%.16f\n", pi * 4);
  34. }
  35.  
  36. int main()
  37. {
  38. double pi = 0;
  39. int czasA = 0, czasB = 0, ile = 1;
  40.  
  41. unsigned long long ilosc1 = 100000000, ilosc2 = 50000000, ilosc3 = 100000000; //100 000 000
  42.  
  43. vector<thread> v;
  44. vector<long long> v1;
  45. vector<long long> v2;
  46.  
  47. printf("Ile watkow chcesz uzyc: ");
  48. scanf_s("%d", &ile);
  49.  
  50. for (int i = 0; i < ile; i++)
  51. {
  52. v1.push_back((ilosc1 / ile) * i);
  53. v2.push_back((ilosc1 / ile) * (i + 1) - 1);
  54. }
  55.  
  56. vector<double>v3(ile);
  57.  
  58. czasA = GetTickCount();
  59.  
  60. for(int i = 0; i < ile; i++)
  61. {
  62. v.push_back(thread(oblicz, ref(pi), v1.at(i), v2.at(i)));
  63. v.at(i).join();
  64. //v3.push_back(pi);
  65. }
  66.  
  67. /*for (int i = 0; i < v3.size() - 1; i++)
  68. {
  69. pi += v3.at(i);
  70. }*/
  71.  
  72. /*for (auto &t : v) {
  73. t.join();
  74. }*/
  75.  
  76. /*for (int i = 0; i < v3.size() - 1; i++)
  77. {
  78. pi = v3.at(i);
  79. }*/
  80.  
  81. //oblicz(pi, 0, 100000000);
  82.  
  83. czasB = GetTickCount();
  84.  
  85. printf("%.16f\n", pi * 4);
  86.  
  87. printf("Czas wykonania zadania: %d ms", czasB - czasA);
  88.  
  89. _getch();
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement