2、程序与进程之间的区别:
1)、进程更能真实地描述并发,而程序不能 2)、进程是由程序和数据两部分组成的 3)、程序是静态的,进程是动态的
4)、进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的 5)、一个程序可对应多个进程,反之亦然
6)、进程具有创建其他进程的功能,而程序没有
3、并发执行:在一定时间内物理机器上有两个或两个以上的进程同处于运行状态。 4、进程通信的基本原理
程序:1、
(输出一个字符的,多次运行)
#include Int p1,p2; p1=fork(); if(p1==0 ) { /*子进程创建成功*/ sleep(1); /*延长子进程运行时间*/ } else { if(p2==0) /*子进程创建成功*/ { sleep(1); /*延长子进程运行时间*/ putchar('c'); } else { sleep(1); /*延长进程运行时间*/ putchar('a'); /*父进程执行*/ } } } P2=fork(); putchar('b'); 输出结果无序; 原因:在程序中调用函数sleep(),使其无需输出。 程序:2、(输出为一句话,多次运行) #include { } else { if(p2==0 ) { printf(\"son %d\\n\for(i=0;i<5;i++) for(i=0;i<5;i++) printf(\"parent%d\\n\ wait(0); /* 保证在子进程终止前,父进程不会终止*/ int p1,p2,i; p1=fork(); if(p1==0 ) exit(0); P2=fork(); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); /*向父进程信号0且该进程推出*/ } else { for(i=0;i<5;i++) } } printf(“grandchild %d\\n\ exit(0); } 第一次运行: 第二次运行: 运行结果:每次结果相同且有序; 原因:程序中调用函数wait()和exit(), 而没有调用sleep()。 程序 3、 #include int p1,p2,i; p1=fork(); if(p1==0 ) { lockf(1,1,0); for(i=0;i<5;i++) printf(\"parent %d\\n\ lockf(1,0,0); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); } else { P2=fork(); if(p2==0 ) { lockf(1,1,0); printf(\"son %d\\n\ else { lockf(1,1,0); for(i=0;i<5;i++) printf(\"daughter %d\\n\ lockf(1,0,0); } } 第一次运行结果: } exit(0); lockf(1,0,0); exit(0); } wait(0); /* 保证在子进程终止前,父进程不会终止*/ for(i=0;i<5;i++) 第二次运行结果: 多次运行结果相同: 原因:i的值较小,使得每个循环时间较短,导致lockf()不能干扰运行结果。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- pqdy.cn 版权所有 赣ICP备2024042791号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务