步关系。
设信号量m1表示父亲放完水果,m2表示儿子取完水果。其初值m1=0,m2=1。 父亲 P1 While(true) {
洗水果; P(m2); 放水果; V(m1); }
儿子 P2 While(true) {
P(m1); 取水果; V(m2); 吃水果; } (2)
父亲 P1 While(true) {
洗水果; 放水果; }
儿子 P2 While(true) {
取桔子; 吃桔子; }
女儿 P3 While(true) {
取苹果; 吃苹果; }
解答:
解法1:父亲先放水果,儿子女儿再吃水果;儿子女儿取完水果,父亲再放水果,这三个进程是一个同步关系。
设信号量m1表示父亲能否放水果,m2表示儿子能否取桔子,m3表示女儿能否取苹果。 初值:m1=1,m2=0,m3=0
父亲 P1 While(true) { 洗水果; P(m1); 放水果; If(是桔子)V(m2); Else V(m3); } 儿子 P2 While(true) { P(m2); 取桔子; V(m1); 吃桔子; } 女儿 P3 While(true) { P(m3); 取苹果; V(m1); 吃苹果; }
解法2:父亲先放水果,儿子女儿再吃水果;儿子女儿取完水果,父亲再放水果,这三个进程是一个同步关系。
设信号量m1表示父亲放完桔子,m2表示父亲放完苹果,m3表示儿子女儿取完苹果。 初值:m1=1,m2=0,m3=1
父亲 P1 While(true) { 洗水果; P(m3); 放水果; If(是桔子)V(m1); Else V(m2); } 儿子 P2 While(true) { P(m1); 取桔子; V(m3); 吃桔子; } 女儿 P3 While(true) { P(m2); 取苹果; V(m3); 吃苹果; }
(3)
父亲 P1 While(true) { 洗桔子; 放桔子; } 母亲 P2 While(true) { 洗苹果; 放苹果; } 儿子 P3 While(true) { 取水果; 吃水果; }
解答:父母亲先放水果,儿子再取水果吃;父亲与儿子,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。
解法1:设信号量m1表示是否有空盘子,信号量m2表示儿子能否取水果。 Int m1=1,m2=0
父亲 P1 While(true) { 洗桔子; P(m1); 放桔子; V(m2); } 母亲 P2 While(true) { 洗苹果; P(m1); 放苹果; V(m2); } 儿子 P3 While(true) { P(m2); 取水果; V(m1); 吃水果; }
父母亲先放水果,儿子再取水果吃;父亲与儿子,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。
解法2:设信号量m1表示父亲或母亲放完水果,信号量m2表示儿子取完水果。 Int m1=0,m2=1
父亲 P1 While(true) { 洗桔子; P(m2); 放桔子; V(m1); } (4)
母亲 P2 While(true) { 洗苹果; P(m2); 放苹果; V(m1); } 儿子 P3 While(true) { P(m1); 取水果; V(m2); 吃水果; }
父亲 P1 While(true) { 洗桔子; 放桔子; } 母亲 P2 While(true) { 洗苹果; 放苹果; } 儿子 P3 While(true) { 取苹果; 吃苹果; } 女儿 P4 While(true) { 取桔子; 吃桔子; }
分析:父母亲先放水果,儿子女儿再取水果;父亲与女儿,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。
解法1:设信号量m1表示是否有空盘子,信号量m2表示儿子能否取苹果,m3表示女儿能否取桔子。
M1=1,m2=0,m3=0;
父亲 P1 While(true) { 洗桔子; P(m1); 放桔子; V(m3) } 母亲 P2 While(true) { 洗苹果; P(m1); 放苹果; V(m2); } 儿子 P3 While(true) { P(m2); 取苹果; V(m1); 吃苹果; } 女儿 P4 While(true) { P(m3); 取桔子; V(m1); 吃桔子; }
解法2:设信号量m1表示父亲放完桔子,信号量m2表示母亲放完苹果,m3表示儿子或女儿取完水果。
M1=0,m2=0,m3=1;

