トロンフォーラム

第7回 タスク間同期・通信機能4

ランデブによるメッセージの受け渡し

ランデブが成立すると、ランデブを呼出したタスクから受け付けたタスクへ、呼出メッセージが渡されます。

具体的には、呼出側タスクがtk_cal_porで指定したmsg以下の領域のcmsgszバイトが、受付側タスクがtk_acp_porで指定したmsg以下の領域にコピーされます。

この様子を図4に示します。

図4 ランデブ成立時のメッセージの受け渡し

図4 ランデブ成立時のメッセージの受け渡し

ランデブによる結果の返信

さて、同期するだけであれば、これまでに説明してきたセマフォイベントフラグでも実現できますし、メールボックスメッセージバッファを利用すれば、同期と同時にメッセージを送ることも可能です。

ランデブに相当する機能をこれらの同期・通信機能を組み合わせて実現することも可能ですが、ランデブを利用すると、サーバ側からクライアント側に返答のメッセージを送ることができます。クライアントタスクはサーバの処理が完了して返答メッセージが送られてくるまで待ち状態に入りますので、返答メッセージ用の領域を別途用意する必要がなく、アプリケーションを書きやすくなります。

ランデブ終了時に返答メッセージを送る際の様子を図5に示します。

図5 ランデブ終了のメッセージの受け渡し

図5 ランデブ終了のメッセージの受け渡し

実際にメッセージの受け渡しを行うプログラムの例をリスト2に示します。

なお、処理の流れのイメージを分りやすくするため、リスト2では簡単なサーバの処理を追加してあります※1

※ 以下のサンプルプログラムはこちらからダウンロードできます。


※1 taskCLからランデブ呼出時のメッセージとして渡された数値を、taskSVで16進数の文字列に変換し、変換した結果(文字列)を、ランデブ終了時の返答メッセージとしてtaskCLに送信しています。

Return Top