问题描述
设有二元函数 f(x,y) = f(x) + f(y)
其中: f(x) = f(x-1) * x (x >1)
f(x)=1 (x=1)
f(y) = f(y-1) + f(y-2) (y> 2)
f(y)=1 (y=1,2)
请编程建立 3 个并发协作进程,它们分别完成 f(x,y)、f(x)、f(y)
示例程序
使用实验示例程序应实现一个并发的父子程序合作将整数 1 从 1 累加到 10 的功能。
打开命令行终端,新建一个文件夹。
命令:cd 创建路径
Mkdir myfirst3
在新建文件夹中建立以下名为 ppipe.c 的 的 C 语言程序
命令:vi ppipe.c
建立项目管理文件 Makefile(其实后面会发现这个文件不建也可以)
命令生成 ppipe.o 文件
生成 ppipe 执行文件
执行 pctl 程序
独立实验
请编程建立 3 个并发协作进程,它们分别完成 f(x,y)、f(x)、f(y)
f(x,y) = f(x) + f(y)
f(x) = f(x-1) * x (x >1)
f(x)=1 (x=1)
f(y) = f(y-1) + f(y-2) (y> 2)
f(y)=1 (y=1,2)
这里可以将整个进程分为 3 段,分别执行 f[x],f[y],f[x]+f[y],所以这里分别使用 3 个进程来进行这里的控制,首先创建一个子进程 1,用于计算 f[x],在父进程中再次创建一个子进程用于计算 f[y],由于程序的并发执行,可以分别设置两个管程,保证二者之间是互斥的,最后将二者相加即可。
pipe.c
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int f1(int x)
{
if(x==1)
{
return 1;
}
else
{
return f1(x-1)*x;
}
}
int f2(int y)
{
if(y ==1||y==2)
{
return 1;
}
else
{
return f2(y-1)+f2(y-2