在 SystemVerilog 中 fork join_none 之后只等待一些线程完成
Wait for only some threads to complete after fork join_none in SystemVerilog
在 SystemVerilog 中,我需要等待一些在 fork join_none 结构中执行的线程完成。但是在另一个 fork join_none 结构中还有另一个进程永远不会结束。
我的代码如下所示:
fork
process_that_will_never_end();
join_none
fork
for(int i = 0; i < 40; i++) begin
fork
process_that_must_end(i);
join_none
end
join
包含 for 循环的 fork join 没有效果(这是我所期望的)。我考虑过在最后使用“等待叉”,但这也会等待 process_that_will_never_end(),所以它不会工作。
有没有办法只等待所有 process_that_must_end() 线程完成?
你几乎成功了。您只需要将 begin/end
的范围移动到 for 循环之外。那么wait fork
只适用于第二个fork
的children。
fork : first_fork
process_that_will_never_end();
join_none
fork begin : second_fork
for(int i = 0; i < 40; i++)
fork : third_forks
automatic int k = i;
process_that_must_end(k);
join_none
wait fork;
end join
在 SystemVerilog 中,我需要等待一些在 fork join_none 结构中执行的线程完成。但是在另一个 fork join_none 结构中还有另一个进程永远不会结束。
我的代码如下所示:
fork
process_that_will_never_end();
join_none
fork
for(int i = 0; i < 40; i++) begin
fork
process_that_must_end(i);
join_none
end
join
包含 for 循环的 fork join 没有效果(这是我所期望的)。我考虑过在最后使用“等待叉”,但这也会等待 process_that_will_never_end(),所以它不会工作。
有没有办法只等待所有 process_that_must_end() 线程完成?
你几乎成功了。您只需要将 begin/end
的范围移动到 for 循环之外。那么wait fork
只适用于第二个fork
的children。
fork : first_fork
process_that_will_never_end();
join_none
fork begin : second_fork
for(int i = 0; i < 40; i++)
fork : third_forks
automatic int k = i;
process_that_must_end(k);
join_none
wait fork;
end join