首页 > 试题广场 >

阅读以下代码,是否有输出?若有写出预期的输出。若无说明理由。

[问答题]

阅读以下代码,是否有输出?若有写出预期的输出。若无说明理由。

 

for(int i=0; i<4; i++) begin

  fork

    begin

       #1 $display(“%d”, i);

    end

  join_none

end

wait fork;

disable fork;

for循环开启4个fork join
每一个都会计数到4
而且for循环并不会消耗仿真时间
所以打印结果应该是:
4
4
4
4
发表于 2020-09-15 16:22:50 回复(0)
  • fork / join: 父线程被阻塞,直到这个分支产生的所有子线程完成。
  • fork / join_any: 父线程被阻塞,直到由此分支产生的任何一个线程完成。
  • fork / join_none: 父线程继续与fork产生的所有子线程同时执行。 
这里for循环之后额外添加,wait_fork阻止当前线程,保证子线程都完成。
所以,输出:
#1 0
#2 1
#3 2
#4 3
之后,disable fork 
发表于 2020-09-03 16:05:09 回复(0)