SV-线程控制和线程之间的通信


一、线程控制

fork……join:并行块里的线程全部执行完才执行块后的;

fork……join_any:块里最快的执行完就跳出,但块里的仍会执行;

fork……join_none:不需要等待块里的线程执行就跳出执行块后的线程。值得一提的是,块后的第一个非延时线程执行早于块内任何一个线程。

wait fork :等待所有子线程结束。

停止线程:disable( + 线程块名字)

二、线程之间的通信(event、semaphore、mailbox)

1、event:主要用于线程之间的同步。唯一一个不需要例化的。

用两个event进行线程之间的同步。@等待(脉冲触发),->触发,如果某个事件先被->了,后面再@,则会因为错过这个事件而被锁住(脉冲宽度为零,错过就错过了)。

可以使用电平敏感的wait(e1.triggered())来代替边沿敏感的@,这样就算事件在当前时间已经被触发过,也不会引起阻塞。

2、semaphore:主要用于多个线程对共享资源的访问,保证同一时间只有一个线程可以访问,互斥访问原则,安全。

要new(),创建一把或者多把钥匙,get()/put()。

3、mailbox:主要用于线程之间做数据通信或数据缓存,原生FIFO。

new()代表信箱无限大。

相关