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 сейчас, поэтому синтаксис может не быть точным, однако я использовал эту технику.

Другие вопросы по тегам