1.概述
2.event事件,不需要例化,不要new。
-
event e1,e2;相当于创建了两个对象了,不需要new。
-
给e1打完了电话之后,在等待e2打过来电话。
-
e2打电话之后发现e1已经在等待他了,所以就先执行了e1的after trigger。
更正后如下:
-
e1被触发后使用电平敏感检测,相当于多了一个检查之前谁给e1打过电话,只要在wait当前时刻或者wait之后的时刻触发了e1,event_trigger电平就会一直保持为1。
-
wait可以避免竞争的问题。
3.通知的需求
只要车子被发动了就能move。
使用@是为了一直捕捉到speedup能够反复捕捉到一个状态
如果想要等待一个event使用wait都需要该事件当前这个时刻或者这个时刻之后触发才算数。比如在10ns处wait,那么在10ns之前发生过该事件,那么event.trigger都不会触发。
答案:CD
4.semaphore旗语,是对象,需要new来例化
get到了钥匙之后,要把钥匙put归还。
-
初始化时可以初始化为0个钥匙,没有钥匙的话,可以不停的put还钥匙,还了多少,他就有多少钥匙了。实验三就是初始化为0把钥匙,然后不断往里还了三把钥匙。semaphore初始化必须要new()。
答案:ABCD
5.mailbox信箱,也是对象,需要new来例化。
容量为1,则put放一个,然后get一个,产生一个消化一个 。如果容量很大的话,可以一次性都放进去。
6.数据通信的需求
不停止的随机化产生数据,然后不停止的从display显示从mailbox里get到的数据。
答案:ABCD
-
队列需要判断是否为空满,再从队列中pop拿出数据,不然会报错。
-
ref int q[$],因为需要对这些队列的指针进行操作,因此需要对外部队列进行操作,因此需要使用ref。
-
队列不需要例化,只需要声明即可。
答案:BC。队列不需要初始化,只需要声明。应该使用ref传递指针。
7.进程的同步需求
-
task stall,先e_stall,再等待e_park。
A到B,B再到A。
上述三种方法,均实现了进行的握手。stall先放数据,然后park拿到数据,park拿到之后还回去,该数据再被stall拿到数据。
-
event和semaphore更偏向小信息量的同步,即不包含更多的数据信息
-
mailbox更适合多数据量。
8.event、semophore、mailbox之间的对比
-
event为打电话接电话,单一的通知功能。
-
semaphore为用钥匙开锁。
-
mailbox为信箱取信放回。