#include #include #include #include #include #include using namespace std; const int THREAD_COUNT{10}; const int COUNT_LIMIT{200'000'000}; const int KILL_LOOP{1}; double pi{4}; mutex pi_mutex; void ThreadFunction (int id, int nThread){ int i; double sum{0}; float signTerm = 1; for(int j =0; j < KILL_LOOP; ++j) { sum = 0; for(i = id * 2 + 1; i < COUNT_LIMIT; i += 2*nThread) { if (i%4 ==1) { signTerm = 1; } else { signTerm = -1; } sum += signTerm *4.0/static_cast(i); } } lock_guard guard(pi_mutex); pi += sum; return ; } int main() { vector threads; for(int i = 0; i < THREAD_COUNT; ++i) { thread t(ThreadFunction, i+1, THREAD_COUNT); threads.push_back(move(t)); } for( int i = 0; i < THREAD_COUNT; ++i) { threads[i].join(); } cout << setprecision(10); cout << "Pi is approximately " << pi << endl; return 0; }