关于Notify的进入前清和离

🔍 溯源 ✍️ Jack | 📅 2026-01-28 | 👍 0 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/FreeRTOS #技术/任务通知 #技术/任务间通信 #质量/普通

原帖 | Jack | 2026-01-28 11:18 | 👍0 | 阅读约1

关于Notify的进入前清和离开时清。

从设计者的角度来讲:
进去前清的意义是 我不关心我开始调用接收wait_notify之前你给我发了什么,一律清掉,从我调用wait_notify之后,你发给我的我才作数。(从此刻,我这个线程才准备好,你之前发我的是我没准备好的,不做数,我准备好以后你通知我的,说明是我准备好可以接收才接受的)

退出时清的意义是 我调用wait_notify后,我接收到notify,处理完以后,我会清掉notify,如果不清我再次调用wait_notify我还会看到上次的notify,反复处理。

再总结下:

Entry 清:我把 wait 当作“从此刻开始订阅”。调用 wait 之前如果通知已经存在,我一律清掉不处理,只认我准备好之后发生的新事件(代价是:清掉的事件等于丢弃)。
比如:
A 发(置1) ---> B 调 wait(entry 清) ---> bit 被清掉 ---> B 开始阻塞等待。
那这里的“A发(置1)” 这步发的置1就丢了,B根本没收到,B如果要继续运行,就得A重发,B才能收到。

Exit 清:我这次 wait 收到事件并处理完后,把对应 bit 清掉,表示“已消费”。否则下一次 wait 会立刻看到旧 bit,导致同一事件被重复消费


相关笔记