Specman e ждет окончания потоков (не трудоемкий метод)
Есть ли способ заставить unit3.thread() работать после двух других потоков?
run() is also
{
start unit1.thread();
start unit2.thread();
unit3.thread();
};
Я хотел бы, чтобы потоки в блоках 1 и 2 работали параллельно, а потоки 3 - после завершения обоих. Однако, так как run() не занимает много времени, методы решения, такие как:
all of
{
{
unit1.thread();
};
{
unit2.thread();
}
};
unit3.thread();
Не допускаются
Есть ли способ заставить unit3.thread() дождаться завершения предыдущих потоков?
1 ответ
Решение
Вы можете сделать это с событиями, вручную запуская события, когда unit1
а также unit2
сделано:
extend sys {
event u1_done;
event u2_done;
run() is also {
all of {
{ unit1.thread(); }
{ unit2.thread(); }
};
};
on @u1_done and @u2_done unit3.thread();
};
Затем в unit1
а также unit2
выдать эти заявления, когда вы закончите:
emit u1_done;
и для unit2
:
emit u2_done;
У меня нет доступа к Specman сейчас, поэтому синтаксис может не быть точным, однако я использовал эту технику.