多线程计算pi值c++代码
时间: 2023-03-24 21:03:33 浏览: 58
#include <stdio.h>
#include <pthread.h>
#define THREADS 4
#define STEPS 100000000
double sum[THREADS];
void *compute_pi(void *arg) {
int id = *(int *)arg;
double step = 1. / STEPS;
int start = id * (STEPS / THREADS);
int end = (id + 1) * (STEPS / THREADS);
for (int i = start; i < end; i++) {
double x = (i + .5) * step;
sum[id] += 4. / (1. + x * x);
}
pthread_exit(NULL);
}
int main() {
pthread_t threads[THREADS];
int ids[THREADS];
for (int i = ; i < THREADS; i++) {
ids[i] = i;
pthread_create(&threads[i], NULL, compute_pi, &ids[i]);
}
for (int i = ; i < THREADS; i++) {
pthread_join(threads[i], NULL);
}
double pi = .;
for (int i = ; i < THREADS; i++) {
pi += sum[i];
}
pi *= 1. / STEPS;
printf("pi = %f\n", pi);
return ;
}