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
    评论
SV线程通信可以通过event、mailbox和semaphore来实现。 一个实例是使用event进行线程通信。当两个线程需要进行数据交换或者知道彼此的状态时,可以使用event来进行通信。通过设置一个event,一个线程可以等待另一个线程触发该event来进行通信。 另一个实例是使用semaphore进行线程通信。当有多个线程需要共享资源或者进行同步操作时,可以使用semaphore来进行通信。在内存中创建一个semaphore类似于创建一个篮子,篮子中包含一定数量的钥匙。每个线程在执行之前必须获取一个钥匙。当一个特定的线程需要钥匙时,只有一定数量的线程可以同时运行。 还有一种线程通信的方式是使用mailbox。Mailbox是SV中不同进程通信方式。通过mailbox,可以在不同的进程之传递信息。一个进程中的数据可以通过mailbox传递给另一个进程。当mailbox中没有数据时,线程将等待。Mailbox类似于一个FIFO队列,可以设置一定的深度。 综上所述,SV线程通信可以通过event、mailbox和semaphore来实现。 #### 引用[.reference_title] - *1* [【sv线程通信】](https://blog.csdn.net/qq_39787102/article/details/128278212)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SV线程内部通信](https://blog.csdn.net/haojie_duan/article/details/108053358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值