多线程求pi(级数法)
posix标准
//
// pi.c
// pi
//
// Created by Yibin on 2021/3/28.
// Copyright © 2021 Yibin. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mut;
double pi = 0.0;
long long series_num; // 确定所求的级数及所需要的线程数
int thread_num; // 确定所求的级数及所需要的线程数
void *Series_Function(void *arg){
int id = *(int *)arg; // 传参强制类型转换并且解引用
int piece = series_num/thread_num; // 确定间隔
int start = id * piece;
int end = start + piece;
double local_pi = 0.0;
double factor;
if(start % 2 == 0)
factor = 1.0;
else
factor = -1.0;
for(int i = start;i<end;i++,factor=-factor){
local_pi += factor/(2*i+1);
}
pthread_mutex_lock(&mut);
pi += 4.0 * local_pi;
pthread_mutex_unlock(&mut);
}
int main(int argc,const char** argv){
series_num = atoi(argv[1]);
thread_num = atoi(argv[2]);
pthread_t thread[thread_num];
int arg_function[thread_num];
for(int i = 0;i<thread_num;i++){
arg_function[i] = i;
pthread_create(&thread[i],NULL,Series_Function,&arg_function[i]);
}
for(int i = 0;i<thread_num;i++){
pthread_join(thread[i],NULL);
}
printf("pi is : %f\n",pi);
exit(0); //进程结束
}
最后运行代码结果