【多线程间的通信_2024.01.16】

发布时间:2024年01月16日

对于硬件的过程块,不同逻辑/时序块之间的通信或者同步,实际是通过信号的变化来完成的。
对于软件的多个线程(多个task同时执行),可用如下方法解决:

event(事件)

静态的同步对象句柄,先等待@ or wait(event_handle.triggered),再触发→ event_handle
······························
@是阻塞的,错过操作的时间点,若没有捕捉到,就会被阻塞在那里
在这里插入图片描述
在这里插入图片描述
······························

SV中引入了triggered属性,用于查询事件是否已被触发(在当前时间片)
······························
在这里插入图片描述
在这里插入图片描述

第一个例子产生了竞争,第二个例子使用triggered都打印
······························

wait_order
等待多个事件的触发,且要求这多个事件按照用户决定顺序触发,否则执行else后的语句

semaphore(旗语)

对同一资源的互斥访问
在这里插入图片描述

mailbox(信箱)

进程之间交换消息,数据通过一个进程发送给mailbox,然后由另一个进程获取(先进先出)

new//产生有界无界mailbox
put & get//会阻塞
try_put & try_get//不会阻塞
peek & try_peek//拿数据后不会删除原始数据
num//mailbox中还有的数据数
mailbox #(类型)//可设置为传递固定类型

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

文章来源:https://blog.csdn.net/xiaotong121/article/details/135621645
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。