Azure RTOS 如何用单个事件向多个线程发出信号?

问题描述

我想用一个事件向多个线程发送信号,最好的方法是什么?例如: 每当 1 秒过去,RTC 中断发生并设置其相关事件标志,之后等待此事件的线程开始运行并执行其工作。

RTC interrupt:    
    tx_event_flags_set (&rtc_events,1_SEC_PASS,TX_OR);

1st Thread: 
    tx_event_flags_get (&rtc_events,TX_OR_CLEAR,&flag_val,TX_WAIT_FOREVER);

2nd Thread: 
    tx_event_flags_get (&rtc_events,TX_WAIT_FOREVER);

如果我这样使用它,只会通知其中一个线程。我可以为同一个 RTC 事件使用多个事件标志,但这次 RTC 将依赖于线程,这在松耦合方面会很糟糕。

RTC interrupt:    
    tx_event_flags_set (&first_thread_events,TX_OR);
    tx_event_flags_set (&second_thread_events,TX_OR);

1st Thread: 
    tx_event_flags_get (&first_thread_events,TX_WAIT_FOREVER);

2nd Thread: 
    tx_event_flags_get (&second_thread_events,TX_WAIT_FOREVER);

以下哪种方法最好?就更好的软件设计而言,有没有第三种方法可以解决这个问题?还是我太担心了?

请给我一些建议。

解决方法

事件标志是一个非常基本的概念,并不真正适合通知多个线程(例如您的第一个示例)。

您的第二个示例是正确的方法,您希望每个要更新的线程都有一个标志。

如果您的应用程序需要进一步解耦,那么您可能希望转向某种形式的发布/订阅模型,在这种模型中,它们的线程可以显式订阅它们感兴趣的消息,并且 RTC 线程将发布消息.

,

瑞恩是对的。您还可以在一个组中拥有多个标志,即您不需要像在第二个示例中那样创建 2 个组。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...