скажем, у меня есть такой код:
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 был выполнен в первом блоке соединения вилки, то его нужно пропустить в оставшихся 4 блоках соединения вилки. Не могли бы вы сказать мне решение о том, как реализовать утверждение 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
Это делает именно то, что вы задали в теле своего вопроса, но не соответствует заголовку. В этом случае вам понадобится семафор
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
Привет Дэйв, Спасибо за помощь.
Я могу ошибаться здесь, но разве вам не нужно добавить какую-то защиту, например, семафор или что-то в этом роде? Можно ли отменить заявление?