トロンフォーラム

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

複数のタスクでランデブする

ところで、リスト1とリスト2ではサーバ側のタスクは1つしか用意されていませんでした。この場合、一度に1つのサービスしか提供できませんが、サーバ側のタスクを複数用意すれば、複数のクライアントタスクから依頼された処理を同時に進めることができるようになります。

図6 サーバタスクが1つの場合

図6 サーバタスクが1つの場合

図7 サーバタスクが複数の場合

図7 サーバタスクが複数の場合

両方のタスクを複数にした場合の実装例をリスト3に示します。

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

リスト3では、リスト2のサーバタスクを4個、クライアントタスクを7個生成して起動しています※2

それぞれのタスクに区別はありませんので、サーバタスクはランデブできたクライアントタスクからの依頼を順に処理していきます。

まとめ

今回はランデブの基本的な機能について説明しましたが、この他にも、呼出側と受付側でビットパターン※3を指定することによってランデブするタスクを選択する機能や、一旦受け付けた処理を別のランデブポートに回送する機能が用意されています。

T-Kernelには、これまでの連載で説明してきたような同期・通信の機能が豊富に用意されています。これらの機能を適切に組み合わせてアプリケーションを開発することで、効率的なプログラムを開発することが可能となります。まずは概略からで構いませんので、各機能についてよく理解してT-Kernelを活用してください。

第6回 ミドルウェア第8回 メモリ管理機能


※2 リスト3のように、同一のプログラム(taskSV()やtaskCL())を複数のタスクとして実行することも可能です。

※3 リストのACP_PTN(受付側選択条件)とCAL_PTN(呼出側選択条件)が、このビットパターンになっています。受付側と呼出側のビットパターンの論理積が0でない場合にランデブが成立します。

Return Top