我正在同时执行多个 fork-joins,如果它在任何其他 fork join 中执行,我希望在 fork join 块中跳过一个语句

I am executing several fork-joins concurrently,I want one statement skipped in a fork join block if it got executed in any of the other fork joins

假设我有这样的代码:

for (int i=o;i<5;i++) begin
automatic int j=i;
fork
thread(i);
join_none
end 

假设线程是这样的: thread() begin statement 1; statement 2; statement 3; end

我的问题是假设如果语句 2 在第一个 fork join 块中执行,则必须在其余 4 个 fork join 块中跳过它。 你能告诉我一个关于如何实现语句 2 的解决方案吗? 谢谢。

您应该将 j 传递给您的线程而不是 i

for (int I=0;i<5;i++) begin
   automatic int j=i;
   fork
     thread(j);
   join_none
  end 
task thread (int n);
    statement 1;
    if (n==0) statement 2;
    statement 3;
endtask

这完全符合您在 body 问题中的要求,但与标题不符。在那种情况下,你需要一个信号量

   semaphore flag;
   flag.new(1);
   for (int i=0;i<5;i++) begin
       automatic int j=i;
       fork
         thread(j);
       join_none
      end
      ...
      task thread (int n);
       static bit flag;
            statement 1;
            if (flag.try_get()) statement 2;
            statement 3;
        endtask