如何解决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 个组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。