推荐答案
测试一下
题目
一段程序如下,请问在 45这个时刻上, A B的值各是多少()
A.0,1
B.0,0
C.1,0
D.1,1
参考答案与知识点
参考答案
正确答案是B。fork-join结构表示两个begin-end块同时从时刻0开始执行。每个块内的语句按顺序执行,延时#n表示延迟n个时间单位后执行下一条语句。
第一个块:0时刻赋值A=1;#20延时后,在20时刻赋值A=0;#30延时后,在50时刻赋值A=1;#50延时后,在100时刻赋值A=0。
第二个块:0时刻赋值B=1;#20延时后,在20时刻赋值B=0;#30延时后,在50时刻赋值B=1;#50延时后,在100时刻赋值B=0。
在45时刻,第一个块的第三个赋值(50时刻)尚未执行,A仍保持为20时刻赋予的值0;第二个块的第三个赋值同样未执行,B保持为20时刻的值0。因此A=0,B=0,对应选项B。
易错点:1. 误认为fork-join是顺序执行,忽略并行性;2. 错误累加延时,将#20 #30理解为绝对延时而非相对延时;3. 混淆阻塞赋值与非阻塞赋值的时序差异(此处为阻塞赋值)。
涉及知识点
- fork-join并行块执行时序
- 延时语句的相对延迟计算
- 阻塞赋值的时间点
- 开始时刻统一为0