![]() |
#2
rjsp2023-06-08 14:04
|
未使用多线程的代码:

void cal_pi(int intervals)
{
unsigned int seed = time(NULL);
int in_circle_points = 0;
int in_square_points = 0;
for (int i=0; i<intervals*intervals; ++i)
{
double x = (double)rand()/RAND_MAX;
double y = (double)rand()/RAND_MAX;
if (x*x + y*y <= 1) in_circle_points += 1;
in_square_points += 1;
}
double pi = 4.0 * in_circle_points / in_square_points;
printf("Total Points: %d, the points in circle: %d, Pi:%lf\n", in_circle_points, in_square_points, pi);
}
int main(int argc, const char *argv[])
{
clock_t start, end;
double time_used;
srand(time(NULL));
start = clock();
for (int i=0; i<10; ++i)
{
cal_pi(100*(i+1));
}
end = clock();
printf("Total Used Time: %f seconds\n", (double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
使用多线程的代码:

void* cal_pi(void* intervals)
{
unsigned int seed = time(NULL);
int in_circle_points = 0;
int in_square_points = 0;
int num = *((int*)intervals);
for (int i=0; i<num*num; ++i)
{
double x = (double)rand()/RAND_MAX;
double y = (double)rand()/RAND_MAX;
if (x*x + y*y <= 1) in_circle_points += 1;
in_square_points += 1;
}
double pi = 4.0 * in_circle_points / in_square_points;
printf("Total Points: %d, the points in circle: %d, Pi:%lf\n", in_circle_points, in_square_points, pi);
pthread_exit(0);
}
int main(int argc, const char *argv[])
{
clock_t start, end;
double time_used;
srand(time(NULL));
start = clock();
pthread_t cal_thread[10];
int args[10];
for (int i=0; i<10; ++i)
{
args[i] = 100*(i+1);
pthread_create(cal_thread+i, NULL, cal_pi, args+i);
}
for (int i=0; i<10; ++i)
{
pthread_join(cal_thread[i], NULL);
}
end = clock();
printf("Total Used Time: %f seconds\n", (double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
没有使用多线程的运行结果:

Total Points: 7887, the points in circle: 10000, Pi:3.154800
Total Points: 31487, the points in circle: 40000, Pi:3.148700
Total Points: 70776, the points in circle: 90000, Pi:3.145600
Total Points: 125450, the points in circle: 160000, Pi:3.136250
Total Points: 196211, the points in circle: 250000, Pi:3.139376
Total Points: 282642, the points in circle: 360000, Pi:3.140467
Total Points: 384858, the points in circle: 490000, Pi:3.141698
Total Points: 502177, the points in circle: 640000, Pi:3.138606
Total Points: 636192, the points in circle: 810000, Pi:3.141689
Total Points: 785339, the points in circle: 1000000, Pi:3.141356
Total Used Time: 0.097244 seconds
./mul 0.10s user 0.00s system 99% cpu 0.099 total
使用了多线程的运行结果:

Total Points: 7906, the points in circle: 10000, Pi:3.162400
Total Points: 31469, the points in circle: 40000, Pi:3.146900
Total Points: 70687, the points in circle: 90000, Pi:3.141644
Total Points: 125873, the points in circle: 160000, Pi:3.146825
Total Points: 195919, the points in circle: 250000, Pi:3.134704
Total Points: 282496, the points in circle: 360000, Pi:3.138844
Total Points: 384970, the points in circle: 490000, Pi:3.142612
Total Points: 502715, the points in circle: 640000, Pi:3.141969
Total Points: 635928, the points in circle: 810000, Pi:3.140385
Total Points: 785658, the points in circle: 1000000, Pi:3.142632
Total Used Time: 3.574630 seconds
./thread 0.75s user 2.83s system 485% cpu 0.737 total
不知道为什么会这样?初入多线程,望大神指点!
