[SV]SystemVerilog线程之fork...join专题

news/2024/5/19 19:50:28 标签: 数字电路设计, SystemVerilog

SystemVerilog线程之fork...join专题

Q:fork-join_none开辟的线程在外部任务退出后也会结束吗?

A:后台线程不会结束,任何由fork开辟的线程(join、join_any、join_none),无论其外部任务(task)何时结束也无论fork何时跳转执行后面的程序,都不会将其开辟的线程自动结束。

A:对于这些后台线程,需要考虑他们接下来是否会影响你的环境(比如修改信号、变量),或由于反复开辟线程而形成“僵尸线程”。

A:比较安全的做法是在fork满足要求之后,通过变量、旗语或者更直接的disable fork,去终止这些线程。

A:对于有握手、仲裁需求的线程(比如sequence发送激励),不应该粗鲁的使用disable fork结束这些线程,而应该在县城内部,在其完成握手、仲裁之后的安全阶段结束线程,否则容易引起死锁(dead-lock)。

Q2: 父线程和子线程之间的执行关系是什么?

A:父线程用fork-join_none开辟子线程后,父线程如果提前结束,二开辟的子线程此时还未结束,那么它还将继续执行。如果父线程还未结束时,通过disable fork语句来终止父线程,那么子线程也将一并被终止。

A:父线程即便退出,后台的子线程也将继续执行,所以在必要时及时终止子线程,避免出现“僵尸线程”。

Q3:disable fork和disable statement有什么差别?

A:disable statement不仅可以终止fork触发的线程,还可以终止具名(named)的进程块(process)和方法(task)。disable可以在该进程或者方法内部来停止该进程或者方法,也可以在其他进程或方法停止外部的进程或者方法。

A:这种停止的方法比disable fork更为自由。disable fork停止的是其所在进程或者方法中的fork触发的所有子线程,但他无法停止在他的范围以外的子线程。

A:disable statement在停止目标时查找的是静态线索,即所有具备该名称的进程或方法;disable fork在停止目标时的范围是其所在线程及其以下的所有子线程。

A:

Q4:嵌套的fork有没有可能被disable fork误杀呢

 A:不会有这种情况,如果能够明确disable fork的边界那么不会误伤到其他相同实例的fork线程。但是,如果是按照线程名字使用disable statement,则并行的多个实例之间就可能会有误伤的情况,那么disable fork就有存在的必要性了。

A:使用disable fork时清楚识别所在线程的边界是正确使用他的关键。

Q5:使用for配合fork-join_none触发多个线程时需要注意什么?

A:for循环配合fork-join_none可以循环触发多个线程,但如果这些线程之间有数据公用的情况,那么实现的场景可能不是我们期望的。为了避免在并行线程之间出现数据公用的情况,就要考虑将调用方法(function、task)及传入的参数都声明为automatic属性。

A:给方法添加automatic描述,仅在module、interface、package中需要这么做,对于class的方法则是不需要额外添加的。
A:对于避免变量公用的情况,for循环无论在module、interface、package还是class中都是需要在其内部使用automatic变量来暂存外部变量,在将该automatic变量作为参数传入fork-join_none触发线程。

 


http://www.niftyadmin.cn/n/205581.html

相关文章

NLP中的特殊标记(Special Tokens)[PAD]、[CLS]、[SEP]、[UNK]

这些是BERT模型中的特殊标记(Special Tokens)。它们的含义如下: [PAD]:在batch中对齐序列长度时,用 [PAD]进行填充以使所有序列长度相同。可以通过将其添加到较短的序列末尾来实现对齐。[CLS]:在输入序列的…

Leetcode.463 岛屿的周长

题目链接 Leetcode.463 岛屿的周长 easy 题目描述 给定一个 row x col的二维网格地图 grid,其中:grid[i][j] 1表示陆地, grid[i][j] 0表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被…

VB+ACCESS电脑销售系统的设计与实现

为了使此系统简单易学易用、功能强大、软件费用支出低、见效快等特点,我们选择Visual Basic6.0开发此系统。Visual Basic6.0起代码有效率以达到Visual c的水平。在面向对象程序设计方面,Visual Basic6.0全面支持面向对你程序设计包括数据抽象、封装、对象…

tcp通信,客户端服务端

进行过程 //TCP通信的流程 //服务器端(被动接受连接的角色) 1.创建一个用于监听的套接字 -监听:监听有客户端的连接 -套接字:这个套接字其实就是一个文件描述符 2.将这个监听文件描述符和本地的IP和端口绑定(IP和端口…

LeetCode23.合并k个有序链表

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。。 示例1 输入:lists [[1,4,5]…

软件测试-自动化测试面试基础相关

在上一家公司做自动化测试用的什么框架? 常见的自动化测试框架包括Selenium、Appium、Robot Framework、JUnit、TestNG等。 我在上家公司做自动化测试用的是: 接口:pythonrequestpytestjson数据驱动jenkins 功能方面使用的是pythonSelenium/A…

数据结构——排序

作者:几冬雪来 时间:2023年4月4日 内容:数据结构排序内容讲解 目录 前言: 排序: 1.插入排序: 2.希尔排序: 3.希尔排序gap问题: 结尾: 前言: 在…

代码随想录算法训练营第35天 | LeetCode860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

代码随想录算法训练营第35天 | LeetCode860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球(学到了一些代码小知识) 860.柠檬水找零 第一遍读题思考 纯粹是分类讨论的问题,一共就三种付钱方式。。。…