Привет всем.
У меня есть сумма
S = 1 / n*n
n от 1 до 100001
Посмотрите пожалуйста на мою жалкую попытку посчитать это с помощью потоков. Колличество потоков передается в шапке bool sum(unsigned int number_threads)
Я не знаю где прописать границы приблежения от 1 до 1000001.
Задание
Посчитайте сумму от n0 till n1 паралельно, быстро и thread-safe . (Wihout main-Thread)
#include <iostream>
#include <thread>
#include <vector>
#include <chrono>
#include <cstdlib>
#include <algorithm>
#include <mutex>
using namespace std;
mutex m_sum;
void Work( int &sum , int n0, int n1 ){ // передавать границы в Work ?????
unique_lock<mutex> lck {m_sum};
double tmp ;
for ( int j = n0 ; j>n1 ; j++) {
tmp = 1/(n*n);
sum=sum+tmp; } ///// _-------> ????
lck.unlock();}
bool sum(unsigned int number_threads)
{
const double pi = 3.14159265358979323846264338327;
const double exact = pi*pi/6.0; //// ___ проверка решения
unsigned int n0 = 1;
unsigned int n1 = 1000001; // --- > собственно границы
double s=0;
thread* t = new thread[number_threads];
for( unsigned int i = 0; i < number_threads; ++i){
t[i] = thread(Work, std::ref(s), n0, n1);
}
for( unsigned int i = 0; i < number_threads; ++i){
t[i].join(); }
cout << "sum=" << s << " " << fabs(s-exact) << endl;
return fabs(s-exact)<1e-4;
}