SV精通5-③线程间的通信

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为信箱取信放回。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值