我正在同时执行多个 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
假设我有这样的代码:
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