【SystemVerilog 之 线程与通信】~ 线程的使用、线程的控制、线程间的通信

  • Post author:
  • Post category:其他




1. 线程的使用



1.1 程序和模块

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



1.2 什么是线程?

在这里插入图片描述

在这里插入图片描述



1.3 线程小结

在这里插入图片描述



1.4 练习

在这里插入图片描述

答案:ABC

解析:D错误,initial中线程不一定会结束,要看initial块中的语句是什么。

在这里插入图片描述

答案:ABCD



2. 线程的控制



2.1 fork并行线程语句块

在这里插入图片描述

如上图所示,fork并行线程语句块有2种方式,分别为fork…join, fork…join_any, fork…join_none。下面我们分别说一下各自的功能:

  1. fork…join:表示T1,2,3并行执行,直到所有的T都执行完成之后,结束。
  2. fork…join_any:表示T1,2,3并行执行,只要其中有一个完成了,那就可以结束了,但是需要注意的是,其他没有执行完成的T依然可以继续执行。
  3. fork…join_none:表示T1,2,3并行执行,不管T有没有用执行完成,我都不管了。相当于起到一个“点火”的作用,点着了就跑了!!!



2.1.1 fork…join

在这里插入图片描述

在这里插入图片描述



2.1.2 fork…join_any

在这里插入图片描述

在这里插入图片描述



2.1.3 fork…join_none

在这里插入图片描述

在这里插入图片描述



2.1.4 小练习

在这里插入图片描述

答案:A



2.2 等待所有衍生线程

在这里插入图片描述



2.3 停止单个线程

在这里插入图片描述



2.4 停止多个线程

在这里插入图片描述

在这里插入图片描述



2.5 停止被多次调用的任务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



3. 线程间的通信



3.1 概述

在这里插入图片描述



3.2 event事件

在这里插入图片描述



3.2.1 举例验证

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



3.2.2 小练习

在这里插入图片描述

答案:BC

解析:考察event触发知识点:@表示可以多次等待事件触发;而.triggered()表示只要有一次事件触发,就会一直满足,不会被阻塞了。



3.3 semaphore旗语

在这里插入图片描述



3.3.1 基本操作

在这里插入图片描述



3.3.2 为什么要资源共享?

在这里插入图片描述

在这里插入图片描述

结果:

在这里插入图片描述

在这里插入图片描述



3.3.3 升级操作

之前我们资源共享的时候可以任意时候归还钥匙,比如原来初始化只有一把钥匙,丈夫还了一把,恰巧妻子也还了一把,那此时不就有2把钥匙了吗?问题是我们不是只有一把吗?出大问题了!!!下边引入管家帮我管理。

在这里插入图片描述

在这里插入图片描述



3.3.4 小练习

在这里插入图片描述

答案:ABCD



3.4 mailbox信箱

在这里插入图片描述



3.4.1 基本使用

在这里插入图片描述

在这里插入图片描述



3.4.2 需求在哪了?举例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



3.4.3 替代方案

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



3.4.4 通过上边两个方案总结

在这里插入图片描述



3.4.5 mailbox其他特性

在这里插入图片描述

在这里插入图片描述



3.4.5.1 event同步

在这里插入图片描述



3.4.5.2 semaphore同步

在这里插入图片描述



3.4.5.3 mailbox同步

在这里插入图片描述



3.4.5.4 结果分析

在这里插入图片描述



3.4.6 小练习

在这里插入图片描述

答案:ABCD

在这里插入图片描述

答案:BC

解析:队列不需要初始化(例化);队列不能赋值传递,需要引用传递ref。



3.5 通信要素的比较

在这里插入图片描述



版权声明:本文为qq_40549426原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。