单核嵌入式系统
基于优先级的调度
线程 2(T2) - 高优先级
线程 1(T1) - 低优先级
单一生产者(T2)和单一消费者(T1)
要求:
数据通过共享循环缓冲区从T2流向T1。数据流 可能在一个方向,即 T2 到 T1。
计划使用循环缓冲区作为共享内存的线程之间 将收到的数据包从 T2 发送到 T1。
T2 将入队,T1 将从循环缓冲区中将数据包出队。
并计划为循环缓冲区添加入队索引和出队索引指针作为易失性(认为它不会解决关键部分问题)。
T2 将更新循环缓冲区和 T2 中的 Enqueue 索引指针 将更新循环缓冲区中的出队索引指针。
T1线程将检查入队和出队索引之前是否相等 开始将数据包从循环缓冲区中出列。
查询:
请发表你的看法
在标准 C 中(并且不指定嵌入方言),读取“排队索引”或任何其他共享变量不会强制线程调度。因此,线程 T1 可能会继续运行。它读取 T2 写入的last值。如果还没有写入值,则为未初始化内存的常规 C 读取,即未定义行为。 (不是“无效值”) 我不知道你为什么提到“关键部分问题”。