#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/time.h>
#include<time.h>
static double total_sum=0.0;
int main()
{
int i,j;
double a[4][25000];
double sum[4]={0.0};
double readBuf[4];
pid_t pid;
int fpipe[4][2];
time_t start,end;
struct timeval system_time;
srand((unsigned)time(NULL));//初始化随机数发生器
for(i=0;i<4;i++)//分别生成4份25000个随机数
{
for(j=0;j<25000;j++)
a[i][j]=(double)rand()/(double)RAND_MAX;
}
gettimeofday(&system_time,NULL);//获取系统时间
start=system_time.tv_usec;//系统时间微秒级
for(i=0;i<4;i++)
{
if(pipe(fpipe[i])<0)//管道设置失败
{
printf("pipe error");
exit(1);
}
pid=fork();
if(pid<0)//子进程创建失败
{
printf("fork error!");
exit(1);
}
else if(pid==0)//进入子进程
{
for(j=0;j<25000;j++)
sum[i]+=a[i][j];
write(fpipe[i][1],&sum[i],sizeof(double));//写
exit(1);
}
else//进入父进程
{
if(!read(fpipe[i][0],&readBuf[i],sizeof(double)))//读
{
exit(1);
}
printf("sum[%d]=%.4f\n",i,readBuf[i]);
}
}
for(i=0;i<4;i++)
{
total_sum+=readBuf[i];
}
printf("total_sum=%.4f\n",total_sum);
gettimeofday(&system_time,NULL);//获取系统时间
end=system_time.tv_usec;//系统时间微秒级
printf("time=%d us\n",end-start);
printf("average=%.4f\n",total_sum/100000);//平均值
return 0;
}
多道程序执行计算100000随机数的值
最新推荐文章于 2024-07-04 09:24:51 发布