This question already has an answer here:
I'm trying to thread a monte carlo simulation to calculate pi. I need each thread to generate 2 random numbers (x and y values between 1 and 0) to sample the simulation, as of now, i'm trying to get one thread to work, but it keeps generating the same number.
#include "pch.h"
#include <iomanip>
#include <iostream>
#include <cmath>
#include <thread>
#include <mutex>
#include <cstdlib>
using namespace std;
long double sampleCount = 0;
long double circleSamples = 0;
long double proportion;
mutex m;
void simulate()
{
long double sampleX;
long double sampleY;
long double sampleHypotenuse;
//Generate Random values for x and y
sampleX = (long double)std::rand() / RAND_MAX;
sampleY = (long double)std::rand() / RAND_MAX;
// Find the distance from the center of the sample area
sampleHypotenuse = sqrt(pow(sampleX - .5, 2) + pow(sampleY - .5, 2));
m.lock();
//Find if sample is within a radius of .5 from the center of the sample area
sampleCount++;
if (sampleHypotenuse <= .5)
{
circleSamples++;
}
m.unlock();
}
int main()
{
int c = 0;
while (true)
{
thread th1(simulate);
th1.join();
proportion = circleSamples / sampleCount;
cout << setprecision(15) << proportion / pow(.5, 2) << endl;
}
}
Removing the thread and executing simulate directly from the main thread, the code works perfectly fine, albeit single threaded and slow
Aucun commentaire:
Enregistrer un commentaire