我很清楚我可以使用'all'和'first'获得fork-join和fork-disable_fork功能。 但是,如何在Specman中实现fork-join_any功能?
答案 0 :(得分:1)
不幸的是,没有直接的方式本地做这件事。 由用户来实现他想要实现的同步方法。 例如,在这种情况下,可以使用warpper TCM和一些事件:
event join_any;
tcm1()@clock is { // some local method
…
};
tcm1_w()@clock is { // a wrapper to some local method.
tcm1();
emit join_any;
};
tcm2_w()@sys.a.b.clock is { // a wrapper to some other unit’s method for this context
sys.a.b.tcm2();
emit join_any;
};
tcm()@clock is {
start tcm1_w(); // starting these wrapper TCMs instead of the iriginal methods.
start tcm2_w();
sync @join_any;
out("continue main thread");
...
};
此实施的重要说明:
包装很重要,因为如果选择的话 使用'is also'扩展方法,只要TCM完成,它就会发出'join_any'事件 当不在fork上下文中时。这可能导致fork块在任何TCM实例完成时加入。
在所有/第一个块中,子线程有一些关于其父线程的指示,但是TCM 开始使用'start'不保留父线程的记录。