# マニュアルページ task.intro.3

## 名前

         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++)