Đây là code của em nhưng khi chạy thì đoạn in số PI ra màn hình nó lại in ra nhiều lần ai giúp e với.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <math.h>
static int counter = 0;
struct diem
{
float x;
float y;
}diem;
float float_rand(float min, float max)
{
float scale = rand()/(float)RAND_MAX;
return min + scale * (max - min);
}
void taoDiem(int sodiem)
{
float d;
struct diem diemnn;
int i = 0;
for(i;i < sodiem;i++)
{
diemnn.x = float_rand(-1,1);
diemnn.y = float_rand(-1,1);
d = sqrt(diemnn.x*diemnn.x + diemnn.y*diemnn.y);
if (d <= 1.0)
{
counter++;
}
}
}
int main(int argc, char* argv[])
{
double PI;
int num=atoi(argv[1]);
int pid;
int sodiem = atoi(argv[2]);
int i = 0;
for(i; i<num; i++)
{
pid = fork();
if(pid > 0)
{
taoDiem(sodiem);
}
else
break;
}
PI = (4 * counter)/(num * sodiem);
printf("counter: %d\n", counter);
printf("n: %d, m: %d\n", num, sodiem);
printf("PI = %lf\n", PI);
}