《操作系统很全很详细的进程同步与互斥 问题课件》由会员分享,可在线阅读,更多相关《操作系统很全很详细的进程同步与互斥 问题课件(70页珍藏版)》请在金锄头文库上搜索。
1、进程同步与互斥,例题,进程同步,进程同步: 并发进程之间相互合作,完成一项工作,它们之间有一定的时序关系。 解题步骤: 确定进程的个数及每个进程的工作; 确定关键工作步(需要控制的); 确定信号量表示的含义(开始或结束); 写出伪代码。,例1:请用信号量机制描述下列并发进程的同步关系。,进程的同步,S,F,P1,P2,P3,P4,解法一:信号量表示进程能否开始。 设信号量m1、m2、m3、m4分别表示进程P1、P2、P3、P4能否开始执行,其初值m1为1,其余均为0。 int m1=1,m2=m3=m4=0 ; cobegin p1() / P2() / P3() / P4() coend,进
2、程的同步,思考: 哪个信号量可以省略?,m1,p1() P(m1) ; 执行p1; V(m2) ; V(m3); ,p2() P(m2) ; 执行p2; V(m4) ; ,p3() P(m3) ; 执行p3; V(m4) ; ,p4() P(m4) ; P(m4); 执行p4; ,解法二:信号量表示进程是否结束。 设信号量m1、m2、m3、m4分别表示进程P1、P2、P3、P4是否结束,其初值均为0。 int m1=m2=m3=m4=0 ; cobegin p1() / P2() / P3() / P4() coend,进程的同步,思考: 哪个信号量可以省略?,m4,p1() 执行p1; V(
3、m1) ; V(m1); ,p2() P(m1) ; 执行p2; V(m2) ; ,p3() P(m1) ; 执行p3; V(m3) ; ,p4() P(m2) ; P(m3); 执行p4; V(m4); ,练习:请用信号量机制描述下列并发进程的同步关系。,进程的同步,S,F,P1,P2,P4,P7,P3,P5,P6,解法一:信号量表示进程能否开始。 设信号量m1m7分别表示进程P1P7能否开始执行,其初值m1为1,其余均为0。 int m1=1,m2=m3=m4=m5=m6=m7=0 ; cobegin p1() / p2() / p3() / p4() / p5() / p6() / p7
4、() coend,进程的同步,解法二:信号量表示进程是否结束。 设信号量m1m7分别表示进程P1P7是否结束,其初值均为0。 int m1=m2=m3=m4=m5=m6=m7=0 ; cobegin p1() / p2() / p3() / p4() / p5() / p6() / p7() coend,进程的同步,进程的同步,例2:公共汽车中的司机和售票员。,司机 P1 售票员 P2 while (true) while (true) 启动车辆; 关门; 正常运行; 售票; 到站停车; 开门; ,解法一:信号量表示进程能否开始。 设信号量m1表示司机进程P1能否启动汽车,初值为0,m2表示售
5、票员进程p2能否开门,初值为0。 int m1=0,m20 ; cobegin p1() / p2() coend,进程的同步,p1() while(1) P(m1); 启动汽车; 正常行驶; 到站停车; V(m2); ,p2() while(1) 关门; V(m1); 售票; (m2); 开门; ,解法二:信号量表示进程是否结束。 设信号量m1表示司机进程P1到站停车结束,初值为0,m2表示售票员进程p2关门结束,初值为0。 int m1=0,m20 ; cobegin p1() / p2() coend,进程的同步,p1() while(1) P(m2); 启动汽车; 正常行驶; 到站停车
6、; V(m1); ,p2() while(1) 关门; V(m2); 售票; (m1); 开门; ,进程的同步,例3-1:吃水果。,父亲 P1 儿子 P2 while (true) while (true) 洗水果; 取水果; 放水果; 吃水果; ,0,父亲,儿子,水果,分析:父亲先放水果,儿子再吃水果;儿子取完水果,父亲再放水果,这两个进程是一个同步关系。 解法一:设信号量m1表示父亲能否放水果,m2表示儿子能否取水果。其初值m1=1,m2=0。 int m1=1,m2=0; cobegin p1()/p2() coend,进程的同步,p1() while(1) 洗水果; P(m1) ; 放
7、水果; V(m2) ; ,p2() while(1) P(m2) ; 取水果; V(m1); 吃水果; ,思考: 假设盘子能放n个水果,如何修改同步关系?,int m1=n,m2=0;,分析:父亲先放水果,儿子再吃水果;儿子取完水果,父亲再放水果,这两个进程是一个同步关系。 解法二:设信号量m1表示父亲放完水果,m2表示儿子取完水果。其初值m1=0,m2=1。 int m1=0,m2=1; cobegin p1()/p2() coend,进程的同步,p1() while(1) 洗水果; P(m2) ; 放水果; V(m1) ; ,p2() while(1) P(m1) ; 取水果; V(m2)
8、; 吃水果; ,进程的同步,例3-2:吃水果。,父亲 P1 儿子 P2 女儿 P3 while (true) while (true) while(true) 洗水果; 取桔子; 取苹果; 放水果; 吃桔子; 吃苹果; ,桔子,父亲,儿子,女儿,0,苹果,分析:父亲先放水果,儿子女儿再吃水果;儿子女儿取完水果,父亲再放水果,这三个进程是一个同步关系。 解法一:设信号量m1表示父亲能否放水果,m2表示儿子能否取桔子,m3表示女儿能否取苹果。 int m1=1,m2=0,m3=0; cobegin p1() / p2() / p3() coend,进程的同步,p1() while(1) 洗水果;
9、P(m1) ; 放水果; if (是桔子) V(m2) ; else V(m3); ,p2() while(1) P(m2) ; 取桔子; V(m1); 吃桔子; ,p3() while(1) P(m3) ; 取苹果; V(m1); 吃苹果; ,分析:父亲先放水果,儿子女儿再吃水果;儿子女儿取完水果,父亲再放水果,这三个进程是一个同步关系。 解法二:设信号量m1表示父亲放完桔子,m2表示父亲放完苹果,m3表示儿子女儿取完水果。 int m1=0,m2=0,m3=1; cobegin p1() / p2() / p3() coend,进程的同步,p1() while(1) 洗水果; P(m3)
10、; 放水果; if (是桔子) V(m1) ; else V(m2); ,p2() while(1) P(m1) ; 取桔子; V(m3); 吃桔子; ,p3() while(1) P(m2) ; 取苹果; V(m3); 吃苹果; ,进程的同步,例3-3:吃水果。,父亲 P1 母亲 P2 儿子 P3 while (true) while (true) while(true) 洗桔子; 洗苹果; 取水果; 放桔子; 放苹果; 吃水果; ,0,父亲,儿子,母亲,桔子,苹果,分析:父母亲先放水果,儿子再取水果吃;父亲与儿子,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。 解法一:设信号量m1表示
11、是否有空盘子,信号量m2表示儿子能否取水果。 int m1=1,m2=0; cobegin p1() / p2() / p3() coend,进程的同步,p1() while(1) 洗桔子; P(m1) ; 放桔子; V(m2) ; ,p2() while(1) 洗苹果 ; P(m1); 放苹果; V(m2); ,p3() while(1) P(m2) ; 取水果; V(m1); 吃水果; ,分析:父母亲先放水果,儿子再取水果吃;父亲与儿子,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。 解法二:设信号量m1表示父亲或母亲放完水果,信号量m2表示儿子取完水果。 int m1=0,m2=1;
12、 cobegin p1() / p2() / p3() coend,进程的同步,p1() while(1) 洗桔子; P(m2) ; 放桔子; V(m1) ; ,p2() while(1) 洗苹果 ; P(m2); 放苹果; V(m1); ,p3() while(1) P(m1) ; 取水果; V(m2); 吃水果; ,0,进程的同步,例3-4:吃水果。,父亲 P1 母亲 P2 儿子 P3 女儿P4 while(true) while (true) while(true) while(true) 洗桔子; 洗苹果; 取苹果; 取桔子; 放桔子; 放苹果; 吃苹果; 吃桔子; ,桔子,父亲,女儿
13、,母亲,苹果,儿子,分析:父母亲先放水果,儿子女儿再取水果;父亲与女儿,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。 解法一:设信号量m1表示是否有空盘子,信号量m2表示儿子能否取苹果,m3表示女儿能否取桔子。 int m1=1,m2=0,m3=0; cobegin p1() / p2() / p3() / p4() coend,进程的同步,p1() while(1) 洗桔子; P(m1) ; 放桔子; V(m3) ; ,p2() while(1) 洗苹果 ; P(m1); 放苹果; V(m2); ,p3() while(1) P(m2) ; 取苹果; V(m1); 吃苹果; ,p4()
14、 while(1) P(m3) ; 取桔子; V(m1); 吃桔子; ,分析:父母亲先放水果,儿子再取水果吃;父亲与儿子,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。 解法二:设信号量m1表示父亲放完桔子,m2表示母亲放完苹果,信号量m3表示儿子或女儿取完水果。 int m1=0,m2=0,m3=1; cobegin p1() / p2() / p3() / p4() coend,进程的同步,p1() while(1) 洗桔子; P(m3) ; 放桔子; V(m1) ; ,p2() while(1) 洗苹果 ; P(m3); 放苹果; V(m2); ,p3() while(1) P(m2) ; 取苹果; V(m3); 吃苹果; ,p4() while(1) P(m1) ; 取桔子; V