编一个C程序,通过创建若干个线程并发运行,合作完成一个任务,例如编写一个通过模拟随机数落在圆内的概率来计算PI(π)值的程序或计算∑i3,i=1,2,…,n的程序。

admin2016-05-14  11

问题 编一个C程序,通过创建若干个线程并发运行,合作完成一个任务,例如编写一个通过模拟随机数落在圆内的概率来计算PI(π)值的程序或计算∑i3,i=1,2,…,n的程序。

选项

答案程序清单14-2通过模拟随机数落在圆内的概率来计算PI(π)值。 程序清单14-2:PI.C /*PI.c is a program designed to calculate pi with some threads.*/ #include<pthread.h> #include<stdio.h> #include<stdlib.h> #include<time.h> #define random(x)(rand()%x) #define MODSIZE 10000/*对random的值求模,受random最大输出值的范围影响, 过大和过小都会影响计算精度*/ #define MODSIZE2 MODSIZE*MODSIZE/*MODSIZE的平方*/ #define ARYAIMES 100000/*每一个线程的计算次数*/ /*线程执行的函数*/ void*dowork(void*pi) { int i; unsigned int x,y;/*命中的坐标值*/ unsigned int in=0,out=0; long unsigned abs;/*记录坐标点距离的平方值*/ for(i=0;i<ARYAIMES;i++){ x=random(MODSIZE); y=random(MODSIZE); abs;(x*x+y*y);/*坐标点距离的平方值*/ if(abs>=MODSIZE2) out++;/*坐标点落在圆外*/ else in++;/*坐标点落在圆内*/ } *(double*)pi:4*((double)in/(double)(in+out));/*共有四个坐标象限*/ printf("Ahepi is:%f\n",*(double*)pi); } main() { int i; int nthreads;/*要创建的线程数*/ pthread_t threads[100]; double pthread data[100];/*线程计算PI的返回值*/ double avr_pi; printf("How many threads?(max=100):"); scant("%d",&nthreads); srand((int)time(0));/*初始化随机数*/ for(i=0;i<nthreads;i++){ pthread_create(&threads[i],NULL,dowork,&pthread_data[i]); /*创建线程*/ } for(i=0;i<nthreads;i++){ pthread_join(threads[i],NULL);/*等待子线程运行结束,汇合结果*/ avr_pi+=pthread_data[i]; } avr_pi/=nthreads; printf("Ahe avr_pi is:%f\n",avr_pi); } 编译: gcc PI.c -lpthread。

解析
转载请注明原文地址:https://kaotiyun.com/show/xiNx777K
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)