使用pipe()创建无名管道
利用管道进行通信时,管道中无数据时,读操作会阻塞,
管道满时,写操作会阻塞。即保证了一次只有一个进程访问管道,
满足了互斥的需求。
此程序,四个子程序共用一个管道,实现十万个数相加,每个进程实现两万个数相加,并把结果传递给父进程,父进程再把四个子进程的结果相加
/*使用pipe()创建无名管道
利用管道进行通信时,管道中无数据时,读操作会阻塞,
管道满时,写操作会阻塞。即保证了一次只有一个进程访问管道,
满足了互斥的需求。
此程序,四个子程序共用一个管道,实现十万个数相加,每个进程实现两万个数相加,并把结果传递给父进程,父进程再把四个子进程的结果相加*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
int main()
{
int fd[2];
int ret = pipe(fd);//创建管道,让四个子进程共享
if(ret < 0)
{
printf("create pipe failure./n");
return -1;
}
else printf("create pipe success.fd[0] = %d,fd[1] = %d.\n",fd[0],fd[1]);
double parent_sum = 0.0;
double n[100000];
for(int i = 0;i < 100000;i++)
{
srand((unsigned)(time(0