提问人:Illya Kuzmych 提问时间:11/18/2023 更新时间:11/18/2023 访问量:21
通知线程传入数据并允许它们访问数据的机制?
Mechanism to notify threads of incoming data and allow them to access it?
问:
在Zephyr RTOS上为嵌入式平台编写代码。
为了描绘我试图解决的情况: 我有通过 UART 传入的数据,并且我有一个传入数据的处理程序。我想:
一个。通知所有线程有新数据传入
b.有一种机制,使所有线程都有机会访问此数据。为简单起见,数据存储在全局结构中。
我正在尝试找出一种解决方案,其中线程可以“订阅”或“注册”到特定事件或信号,然后一旦它们意识到新数据进入,它们就可以继续调用一些函数来访问它,其中互斥锁将用于一次将访问的数据锁定到一个线程,并且可能执行 memcpy() 将数据从全局结构复制到线程希望使用的一个。
我尝试了多种解决方案,但似乎坚持这样一个事实,即每次触发事件处理程序时,最多只有一个线程才有机会访问数据。
例如,我使用k_poll和信号提升来表示新数据何时出现。我有多个线程初始化一个使用共享信号的事件。一个线程(可能具有更高的优先级)将始终首先获得访问权限,然后重置信号,从而导致其他线程丢失数据。
我还尝试使用计数信号量。但是,具有最高优先级的线程始终获取数据,而其他线程无法读取数据。
我考虑过制作一个轮询信号的链接列表,然后在新数据出现时迭代它并单独提出每个信号。这样,每个线程都可以依赖于唯一的信号,并能够访问数据。但我担心,在线程有机会读取数据之前,数据可能会被覆盖。
我的问题是,什么是适用于此的实现?
答: 暂无答案
评论