第2章 与处理器管理有关的系统功能调用实践作业
参照“强化实践能力培养课程内容”中“进程创建和执行的实践能力培养考核选例”和“线程的创建及线程间管道通信实践能力培养考核选例”程序,编写一个能建立两个子进程的程序(父进程),让这三个进程并发执行完成以下二元函数的计算:
其中由父进程完成:f(x,y) = f(x) + f(y)
由子进程1 完成阶乘计算: f(x) = f(x-1) * x (x >1) f(x)=1 (x=1)
由子进程2完成非波纳奇序列: f(y) = f(y-1) + f(y-2) (y> 2) f(y)=1 (y=1,2)
答:实验代码及说明 #include <> #include <> #include <>
int main(int argc, char *argv[]) {
int pid,pid2;;
exit(EXIT_FAILURE); }else if (pid2 == 0){ //管道2的1端写 close(pipe2[0]); fy = Fy(y); printf(\pid is %d fy=%d (y=%d) \\n\ write(pipe2[1],&fy,sizeof(int)); close(pipe2[1]); //退出该线程
exit(EXIT_SUCCESS); }
//父进程负责从管道1的0端,管道2的0端读 close(pipe1[1]); close(pipe2[1]);
read(pipe1[0],&fx,sizeof(int)); read(pipe2[0],&fy,sizeof(int)); fxy = fx + fy;
printf(\pid is %d fxy=%d (x=%d,y=%d) \\n\
close(pipe1[0]); close(pipe2[0]); }
1
//父进程执行结束 return EXIT_SUCCESS; }
//函数(xy)
int Fxy(const int fx,const int fy){ return fx+fy; }
//函数f(y)
int Fy(const int y){
return y==1||y==2 1:(Fy(y-1)+Fy(y-2)); }
//函数f(x)
int Fx(const int x){
return x==1 1:Fx(x-1)*x; }
2