void func1() { }
void func2() { } main() { }
3)保存退出“exam8a.cm”。 4)在Linux下编译“exam8a.cm”。 #./bacc exam8a.cm
5)解释执行“exam8a.pco”。 #./bainterp exam8a.pco
记录执行结果。
6)再次解释执行“exam8a.pco”。 #./bainterp exam8a.pco
比较这次结果与上次结果有何不同,试说明原因。 7)使用Vi编辑一个新文件“exam8b.cm”。 #vi exam8b.cm
其内容如下: int x=0; int y=0; void func1() {
x=4; cout< cobegin{func1();func2();} cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ } void func2() { } main() { } 8)保存退出“exam8b.cm”。 9)在Linux下编译“exam8b.cm”。 # ./bacc exam8b.cm 10)解释执行“exam8b.pco”。 #./bainterp exam8b.pco 记录执行结果。 11)再次解释执行“exam8b.pco”。 #./bainterp exam8b.pco 比较这次结果与上次结果有何不同,试说明原因。并解释每种结果的语句执行次序。 12)使用Vi编辑一个新文件“exam8c.cm”。 #vi exam8c.cm 其内容如下: int x=0; void func1() { int i=0; for(i=0;i<50;i=i+1) cobegin{func1();func2();} cout<<\ \ y=3; cout< { x=x+1;} } void func2() { int i=0; for(i=0;i<50;i=i+1) { x=x+1;} } main() { } 13)保存退出“exam8c.cm”。 14)在Linux下编译“exam8c.cm”。 # ./bacc exam8c.cm 15)解释执行exam8c.pco ./bainterp exam8c.pco 记录执行结果。看看x的结果是否等于100。试说明原因。 16)使用Vi编辑一个新文件“exam8d.cm”。 #vi exam8d.cm 其内容如下: int x=0; int turn=0; void func1() { int i=0; for(i=0;i<50;i=i+1) { while(turn!=0); } } void func2() { int i=0; for(i=0;i<50;i=i+1) { x=x+1; /*临界区*/ turn=1; cobegin{func1();func2();} cout<<\ while(turn!=1); x=x+1; /*临界区*/ turn=0; } } main() { } 17)保存退出“exam8d.cm”。 18)在Linux下编译“exam8d.cm”。 # ./bacc exam8d.cm 19)解释执行“exam8d.pco”。 # ./bainterp exam8d.pco 记录执行结果。看看x的结果是否等于100。试说明原因。 20)使用Vi编辑一个新文件“exam8e.cm”。 #vi exam8e.cm 其内容如下: int x=0; semaphore s; void func1() { int i=0; for(i=0;i<50;i=i+1) { wait(s); x=x+1; /*临界区*/ signal(s); } } void func2() { int i=0; for(i=0;i<50;i=i+1) cobegin{func1();func2();} cout<<\ { wait(s); x=x+1; /*临界区*/ signal(s); } } main() { } initialsem(s,1); cobegin{func1();func2();} cout<<\ 21)保存退出“exam8e.cm”。 22)在Linux下编译“exam8e.cm”。 #./bacc exam8e.cm 23)解释执行“exam8e.pco”。 # ./bainterp exam8e.pco 记录执行结果。看看x的结果是否等于100。试说明原因。