在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3296|回复: 7

[求助] 小白的SV学习之路——关于fork_join块疑问

[复制链接]
发表于 2020-3-17 23:28:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Traviss 于 2020-3-17 23:38 编辑

小白求助,最近在看SV绿皮书,书上讲到线程中的自动变量这一块。代码如例7.9图所示,执行顺序为第一张图(例7.10)不太懂得地方就是,为什么$write线程在原始代码块之后执行呢?

代码中线程的产生和执行时间究竟是有什么规则呢?
求大佬解答!感谢!
例7.9.png
例7.10.png
发表于 2020-3-18 08:31:20 | 显示全部楼层
fork  join_none 是把线程挂起,把后续线程执行了再执行
发表于 2020-3-18 13:02:06 来自手机 | 显示全部楼层
    我觉得楼上是正确的,fork join_none只是把线程创建好,等join_none后不阻塞的代码执行完毕后再开始执行线程内部。加了#0表示后面的线程暂时停止,执行fork中的语句。如果fork内部语句不阻塞就全部执行,如果内部语句也有阻塞,然后#0后的代码与fork内部语句并行执行。    图片上创建了多个线程待执行,后面有#0,则开始执行fork语句,此时每个线程内打印的都是当前的j值,所以都一样。    可以选择for语句和fork语句之间加一个临时变量,并将j的值给临时变量。fork join_none之间的语句封装成一个task,参数为临时变量,这样每次创建线程task收到一个实参,开辟内存空间,多次循环有多个task,就会有多个线程,每个线程有自己的内存空间,最后打印的都是复制到自己内存空间的值。
发表于 2020-3-18 13:27:07 来自手机 | 显示全部楼层
我觉得最好的理解方式就是站在编译器角度想,创建线程肯定要为每一个线程分配好内存空间,如果都是同一块内存空间,哪来的多线程之说。
发表于 2020-3-18 13:37:03 来自手机 | 显示全部楼层
所以只要保证创建的线程可以保存循环变量的副本就可以了
 楼主| 发表于 2020-3-18 19:05:28 | 显示全部楼层


阿莹的三石 发表于 2020-3-18 13:02
我觉得楼上是正确的,fork join_none只是把线程创建好,等join_none后不阻塞的代码执行完毕后再开始执 ...


感谢您,回答的非常详细,就是说线程都是动态创建的,就是先进行内存空间分配,而在仿真时间的最后时刻,线程再执行吧
 楼主| 发表于 2020-3-18 19:06:36 | 显示全部楼层


zhuyi1234567899 发表于 2020-3-18 08:31
fork  join_none 是把线程挂起,把后续线程执行了再执行


非常感谢指点!
发表于 2020-3-18 20:45:07 来自手机 | 显示全部楼层
仿真时有什么observe,reactive区域什么的,我也不理解,我只是根据实际仿真结果以及软件知识给出一些推断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-14 18:59 , Processed in 0.022979 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表