我想用一个事件给多个线程发信号,最好的方法是什么?例如:只要经过1秒,RTC中断就会发生,并设置其相关事件标志,之后等待该事件的线程将开始运行,并完成其工作。
RTC interrupt:
tx_event_flags_set (&rtc_events, 1_SEC_PASS, TX_OR);
1st Thread:
tx_event_flags_get (&rtc_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);
2nd Thread:
tx_event_flags_get (&rtc_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);如果我这样使用它,只有一个线程会收到通知。我可以为同一个RTC事件使用多个事件标志,但这一次RTC将依赖于线程,这在松散耦合方面是不好的。
RTC interrupt:
tx_event_flags_set (&first_thread_events, 1_SEC_PASS, TX_OR);
tx_event_flags_set (&second_thread_events, 1_SEC_PASS, TX_OR);
1st Thread:
tx_event_flags_get (&first_thread_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);
2nd Thread:
tx_event_flags_get (&second_thread_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);这些方法中哪一种最好?在更好的软件设计方面,有没有第三种方法来解决这个问题?还是我太担心了?
请给我一些建议。
发布于 2021-04-28 00:57:05
事件标志是一个非常基本的概念,并不真正适合于通知多个线程(如您的第一个示例)。
您的第二个示例是正确的方法,您需要为每个要更新的线程设置一个标志。
如果您的应用程序需要进一步的解耦,那么您可能希望转移到某种形式的发布/订阅模型,在这种模型中,线程可以显式地订阅它们感兴趣的消息,而RTC线程将发布消息。
发布于 2021-04-28 01:44:06
莱恩是对的。您也可以在一个组中有多个标志,即您不需要像在第二个示例中那样创建两个组。
https://stackoverflow.com/questions/67285066
复制相似问题