TASK.INTRO(3C++)

名前
task.intro - コルーチンライブラリとマニュアルページについて

形式

#include <task.h>

class object { ... };
class sched: public object { ... };
class task: public sched { ... };
class timer: public sched { ... };

class Interrupt_handler : public object { ... };

class qhead: public object { ... };
class qtail: public object { ... };

struct histogram { ... };
class randint { ... };
class urand: public randint { ... };
class erand : public randint { ... };

機能説明
これらのマニュアルページは、タスク (コルーチン) ライブラリを構成する 個々の関数やクラスの詳細を説明しています。 マニュアルページとは別に、 概要や使用例を示すチュートリアルも用意されています。

タスクライブラリはシミュレーション・プログラムで使用するように設計され、 オリジナル版は AT&T のベル研究所で C で書かれました。 C++ のタスクライブラリはこのオリジナル版を改良したものですが、 ところどころで C の機能を引き継いでいます。

タスクライブラリにより、 各スレッド用に別々の UNIX プロセスを持つためのオーバーヘッドなしで、 複数の制御スレッドから管理できるプログラムを書くことができます。 これは特に、シミュレーション内の各オブジェクトが 独立した実行スレッドを持っているシミュレーションに利用できます。 何百、何千というオブジェクトがある場合、 それぞれのオブジェクトに別々の UNIX プロセスを持たせることは不可能です。 このライブラリを使用すれば、 シミュレーション全体を単一の UNIX プロセスとして実行しながら、 別のプロセスや時間の経過をシミュレートできます。

タスクライブラリは、非先取り方式のタスク・スケジューリングに 必要なものを提供します。 これにより、余分な同期がいっさい不要になるため、 プログラムの設計は大幅に簡略化されます。 各タスクの実行は、 wait 操作を実行するかそのタスクを終了することで暗黙的に制御を放棄するか、 直ちに提供されないサービスを要求することで暗黙的に制御を放棄するまで 続けられます。 したがって、各タスクは別々に中断したり再開したりできます。

  タスククラス

次のクラスについては、 マニュアルページ task(3C++) で説明します。

object
    タスクシステムの全クラスの基底クラス。 タスクシステムは各種のリストやキューから構成され、 リストまたはキューの中のすべてのものはクラス object から派生されます。

sched
    基本的なスケジューリング機能を提供します。 sched 型のオブジェクトは作成できませんが、 タスクとタイマーのすべてがこのクラスから派生されます。 したがって、「スケジューラ」そのものは存在せず、 システム内のすべてのタスク・オブジェクトがこのクラスのメンバー関数と データメンバーを使用してスケジューリング・プロセス内で同時に動作します。

timer
    タスクの非常に簡単な形で、時間の経過だけを表します。 たとえば、このクラスのタスクはタイマーを起動したり、 タイマーが終了するのを待機したりします。

task
    実際のすべてのユーザータスクの基底クラス。 この型のオブジェクトを作成することはできません。 ユーザータスクのオブジェクトの型は、クラス task から直接派生したものでなければなりません。 ユーザータスク型のコンストラクタは、 個々のタスクのメインプログラムです。

  割り込みクラス

クラス Interrupt_handler は、UNIX シグナルを介して外部イベントを処理するためのインタフェースを 提供します。このクラスについては、 マニュアルページ interrupt(3C++) で説明します。

  キュークラス

クラス qhead および qtail からキュー (先入れ先出し方式のリスト) が構成されます。 クラス object から派生したものはすべてキューに置くことができます。 これらのクラスについては、マニュアルページ queue(3C++) で説明します。

  統計クラス

次のクラスは、シミュレーションやデータ収集に利用できます。 詳細については、マニュアルページ tasksim(3C++) で説明します。

histogram
    データを収集してヒストグラムを作成できます。

randint
    0 から maxint までの範囲の一様乱数を生成します。

urand
    ユーザーが指定した範囲の一様乱数を生成します。

erand
    指定された値を平均値とする指数乱数を生成します。

注意事項
この製品出荷の時点では、コルーチンライブラリが現在のバージョン上では サポートされません。

関連項目
interrupt(3C++)、 queue(3C++)、 task(3C++)、 tasksim(3C++)