当前位置: 首页 > news >正文

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

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.lryc.cn/news/45410.html

相关文章:

  • 你看这个spring的aop它又大又宽
  • 设计模式-创建-单例模式
  • 使用mybatis-plus-generator配置一套适合你的CRUD
  • MATLAB实现各种离散概率密度函数(概率密度/分布/逆概率分布函数)
  • 指针的基本知识
  • 当你的IDE装上GPT
  • 一图看懂 pathlib 模块:面向对象的文件系统路径, 资料整理+笔记(大全)
  • 前端如何将node.js 和mongodb部署到linux服务器上
  • mysql数据迁移
  • 【4.3蓝桥备战】小朋友崇拜圈、正则问题
  • MySQL读写分离中间件
  • 【Spring源码设计模式】单例模式外带设计模式的单例模式
  • go并发编程 —— singleflight设计模式
  • 【LeetCode】二叉树的中序遍历(递归,迭代,Morris遍历)
  • 银行数字化转型导师坚鹏:数字化转型背景下的银行柜员提升之道
  • ChatGPT的平替来了?一文总结 ChatGPT 的开源平替,你值得拥有
  • 关于数据同步工具DataX部署
  • 如何开发JetBrains插件
  • 企业采购成本管理的难题及解决方案
  • 龙蜥白皮书精选:基于 SM4 算法的文件加密(fscrypt)实践
  • 【SpringBoot入门】SpringBoot的配置
  • react 学习整理
  • 物理引擎系统-ode
  • 函数设计—参数规则
  • rsync远程同步
  • 中国大陆IP段(仅大陆地区)【2020-07-24】
  • 从零开始的嵌入式Linux生活(一) 背景介绍
  • 后缀为whl的文件是什么?如何安装whl文件?学习一下(22)
  • 整合Juit
  • C#,码海拾贝(11)——拉格朗日(Lagrange)三点式曲面插值算法,《C#数值计算算法编程》源代码升级改进版