j=i; if(i%2==0){ sum1+=1/(2*j-1); }
// printf(\
if(i%2==1){ sum2+=1/(2*j-1); } }
// printf(\
sum=sum2-sum1; // printf(\// printf(\
result=malloc(sizeof(result)); result->sum=sum; return result; }
int main(){ int i; float j;
float sum1=0,sum2=0,sum=0; for(i=1;i<=LEN/2;i++){ j=i; if(i%2==0){ sum1+=1/(2*j-1); }
if(i%2==1){ sum2+=1/(2*j-1); } }
sum=sum2-sum1; // printf(\ pthread_t sub;
pthread_create(&sub,NULL,subThread,NULL); struct result *result;
pthread_join(sub,(void **)&result); sum+=result->sum;
printf(\ return 0; }
pi2.c: 使用N个线程根据莱布尼兹级数计算PI
? ? ? ?
思路:
设计算公式前1000项,读取用户输入的线程数目N,通过
pthread_create(&workers[i-1],NULL,compute,myparam);产生N个线程,并且通过myparam设置每一个线程计算的起始项和终止项,通过pthread_join(workers[j],(void **)&myresult);等待每个线程结束并通过result获取结果,将结果相加即可。 源代码:
#include
与上一题类似,但本题更加通用化,能适应N个核心,需要使用线程参数来实现 主线程创建N个辅助线程
每个辅助线程计算一部分任务,并将结果返回
主线程等待N个辅助线程运行结束,将所有辅助线程的结果累加
#include
#define LEN 10000
#define MAX_WORKERS 100 struct param{ int start; int end; };
struct result{ float sum; };
void *compute(void *arg){
int i; float j;
struct param *myparam; myparam=(struct param *)arg; int start=myparam->start; int end=myparam->end; struct result *myresult;
float sum1=0,sum2=0,sum3=0; for(i=start;i<=end;i++){ j=i; if(i%2==0){ sum1+=1/(2*j-1); }
if(i%2==1){ sum2+=1/(2*j-1); } }
myresult=malloc(sizeof(struct result)); myresult->sum=sum2-sum1; return myresult; }
int main(){
相关推荐: