正確な方法は RTOS によって異なりますが、基本的には、イベントまたはセマフォを待機してから、キューをポーリングする必要があります (ノンブロッキング/ゼロ タイムアウト読み取り)。送信タスクは、メッセージを適切なキューに入れ、イベントまたはセマフォを設定する必要があります。これは、単一のタスク インターフェイス関数で行う必要があります。送信タスクは、受信タスクの通信の仕組みを知る必要はありません。
イベント フラグを使用する場合は、キューごとに個別のフラグを使用できるため、どのキュー (一方または他方、または両方) から読み取るかがわかりますが、イベント フラグはオブジェクトをカウントしないため、キューをポーリングする必要があります。キューに複数のメッセージがある場合は、使い果たされるまで繰り返します。
カウントセマフォはある程度役に立ちますが、メッセージがどのキューにあるかではなく、メッセージの総数を通知するだけなので、セマフォが取得されるたびに両方をチェックする必要があります。これにより、1 つのセマフォ カウント (各キューから 1 つ) に対して 2 つのメッセージが読み取られ、その後に対応するメッセージのない sem-take が続く可能性があります。共有データを使用してセマフォを拡張するか、RTOS でキュー内のメッセージ数を報告できる場合があります。
バイナリ セマフォはイベント フラグのように機能しますが、どちらのキューにメッセージがあるかを知る方法がないため、両方をポーリングする必要があります。