(57)【要約】【課題】呼び出し元のスレッドから起動されるスレッドに対して、初期化処理を柔軟に設定すること。【解決手段】本発明にかかるスレッド制御システムは、第１のスレッドから、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する受信手段と、第１のスレッドとは異なる第２のスレッドに対して、指定された初期化処理情報を設定する設定手段と、第２のスレッドの起動時に、設定された初期化処理情報に基づき第２のスレッドに初期化処理を実行させるスレッド実行手段と、を備える。【選択図】図１
2010204874.tif 000002
【特許請求の範囲】
【請求項１】
第１のスレッドから、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する受信手段と、
前記第１のスレッドとは異なる第２のスレッドに対して、前記指定された初期化処理情報を設定する設定手段と、
前記第２のスレッドの起動時に、前記設定された初期化処理情報に基づき前記第２のスレッドに初期化処理を実行させるスレッド実行手段と、
を備えるスレッド制御システム。
【請求項２】
前記初期化処理情報を格納する処理情報格納手段をさらに備え、
前記受信手段は、前記第１のスレッドから前記処理情報格納手段に格納された初期化処理情報を前記指定として受信し、
前記設定手段は、前記第２のスレッドに対して、前記処理情報格納手段に格納された初期化処理情報を設定する、
ことを特徴とする請求項１に記載のスレッド制御システム。
【請求項３】
前記指定された初期化処理情報は、前記第１のスレッドの起動時に実行された初期化処理であることを特徴とする請求項１又は２に記載のスレッド制御システム。
【請求項４】
前記受信手段は、前記第１のスレッドに設定された初期化処理情報を前記指定として受信し、
前記設定手段は、前記第２のスレッドに対して、前記第１のスレッドに設定された初期化処理情報を設定する、
ことを特徴とする請求項１乃至３のいずれか１項に記載のスレッド制御システム。
【請求項５】
前記設定手段は、前記第１のスレッドに前記初期化処理情報が設定されていない場合に、前記第２のスレッドの初期化処理アドレスをクリアし、
前記スレッド実行手段は、前記第２のスレッドの起動時に、前記第２のスレッドに初期化処理を実行させない、
ことを特徴とする請求項４に記載のスレッド制御システム。
【請求項６】
前記設定手段は、前記第２のスレッドに対して、前記第１のスレッドを呼び出し元のスレッドとしてさらに設定することを特徴とする請求項１乃至５のいずれか１項に記載のスレッド制御システム。
【請求項７】
第１のスレッドから、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する受信ステップと、
前記第１のスレッドとは異なる第２のスレッドに対して、前記指定された初期化処理情報を設定する設定ステップと、
前記第２のスレッドの起動時に、前記設定された初期化処理情報に基づき前記第２のスレッドに初期化処理を実行させるスレッド実行ステップと、
を含むスレッド制御方法。
【請求項８】
前記初期化処理情報を格納する処理情報格納ステップをさらに含み、
前記受信ステップは、前記第１のスレッドから前記処理情報格納ステップに格納された初期化処理情報を前記指定として受信し、
前記設定ステップは、前記第２のスレッドに対して、前記処理情報格納ステップにより格納された初期化処理情報を設定する、
ことを特徴とする請求項７に記載のスレッド制御方法。
【請求項９】
前記指定された初期化処理情報は、前記第１のスレッドの起動時に実行された初期化処理であることを特徴とする請求項７又は８に記載のスレッド制御方法。
【請求項１０】
前記受信ステップは、前記第１のスレッドに設定された初期化処理情報を前記指定として受信し、
前記設定ステップは、前記第２のスレッドに対して、前記第１のスレッドに設定された初期化処理情報を設定する、
ことを特徴とする請求項７乃至９のいずれか１項に記載のスレッド制御方法。
【請求項１１】
前記設定ステップは、前記第１のスレッドに前記初期化処理情報が設定されていない場合に、前記第２のスレッドの初期化処理アドレスをクリアし、
前記スレッド実行ステップは、前記第２のスレッドの起動時に、前記第２のスレッドに初期化処理を実行させない、
ことを特徴とする請求項１０に記載のスレッド制御方法。
【請求項１２】
前記設定ステップは、前記第２のスレッドに対して、前記第１のスレッドを呼び出し元のスレッドとしてさらに設定することを特徴とする請求項７乃至１１のいずれか１項に記載のスレッド制御方法。
【請求項１３】
第１のスレッドから、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する受信ステップと、
前記第１のスレッドとは異なる第２のスレッドに対して、前記指定された初期化処理情報を設定する設定ステップと、
前記第２のスレッドの起動時に、前記設定された初期化処理情報に基づき前記第２のスレッドに初期化処理を実行させるスレッド実行ステップと、
を含むスレッド制御処理をコンピュータに実行させるスレッド制御プログラム。
【請求項１４】
前記初期化処理情報を格納する処理情報格納ステップをさらに備え、
前記受信ステップは、前記第１のスレッドから前記処理情報格納ステップに格納された初期化処理情報を前記指定として受信し、
前記設定ステップは、前記第２のスレッドに対して、前記処理情報格納ステップにより格納された初期化処理情報を設定する、
ことを特徴とする請求項１３に記載のスレッド制御プログラム。
【請求項１５】
前記指定された初期化処理情報は、前記第１のスレッドの起動時に実行された初期化処理であることを特徴とする請求項１３又は１４に記載のスレッド制御プログラム。
【請求項１６】
前記受信ステップは、前記第１のスレッドに設定された初期化処理情報を前記指定として受信し、
前記設定ステップは、前記第２のスレッドに対して、前記第１のスレッドに設定された初期化処理情報を設定する、
ことを特徴とする請求項１３乃至１５のいずれか１項に記載のスレッド制御プログラム。
【請求項１７】
前記設定ステップは、前記第１のスレッドに前記初期化処理情報が設定されていない場合に、前記第２のスレッドの初期化処理アドレスをクリアし、
前記スレッド実行ステップは、前記第２のスレッドの起動時に、前記第２のスレッドに初期化処理を実行させない、
ことを特徴とする請求項１６に記載のスレッド制御プログラム。
【請求項１８】
前記設定ステップは、前記第２のスレッドに対して、前記第１のスレッドを呼び出し元のスレッドとしてさらに設定することを特徴とする請求項１３乃至１７のいずれか１項に記載のスレッド制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッド制御システム、方法及びプログラムに関し、特に、スレッドから呼び出されるスレッドにおける初期化処理を制御するためのスレッド制御システム、方法及びプログラムに関する。
【背景技術】
【０００２】
マルチスレッドは、一つのソフトウェア上で同時に複数の処理を実行させるための技術である。図７は、マルチスレッドが利用されるクライアント／サーバアプリケーションシステムの例を示す図である。サーバアプリケーション７２は、クライアントアプリケーション７１からの複数の処理要求をマルチスレッドにより実現する。サーバアプリケーション７２は、データ受信部７２１と、処理ディスパッチ部７２２と、スレッドを実行する処理実行部７２３及び７２４とを備える。
【０００３】
このようなクライアント／サーバアプリケーションシステムの動作例を以下に説明する。クライアントアプリケーション７１は、サーバアプリケーション７２に接続し、実行したい処理を送信する。
【０００４】
また、サーバアプリケーション７２は、次のように動作する。まず、データ受信部７２１は、クライアントアプリケーション７１からの接続を待つ。次に、データ受信部７２１は、クライアントアプリケーション７１から接続された後に、クライアントアプリケーション７１から送信される処理を受信する。そして、データ受信部７２１は、受信した処理を処理ディスパッチ部７２２へ送信する。
【０００５】
続いて、処理ディスパッチ部７２２は、スレッドを作成し、クライアントアプリケーション７１から受信した処理を格納する。そして、処理ディスパッチ部７２２は、作成したスレッドとクライアントアプリケーション７１から受信した処理とを処理実行部７２３及び７２４に設定する。その後、処理実行部７２３及び７２４は、処理ディスパッチ部７２２に設定された処理を基にスレッドを開始する。
【０００６】
このように、上述したサーバアプリケーション７２は、スレッドを作成し、クライアントアプリケーション７１から受信した処理を格納した後に、スレッドを開始する。つまり、サーバアプリケーション７２は、クライアントアプリケーション７１から要求される処理をスレッドに設定するものである。
【０００７】
また、複数のスレッドを初期化する技術として、次のものがある。
【０００８】
特許文献１には、競合を低減したマルチスレッドシステムのメッセージ格納構造内のメッセージへアクセスするための方法及び装置に関する技術が開示されている。特に、特許文献１にかかる方法及び装置における各子プロセスは、新規アクティブ接続スレッドを初期化する初期化スレッドを有する。
【０００９】
特許文献２には、コンピュータ等でプロセスを処理する場合に、プロセスを構成する複数のスレッドのうちの一つで異常が発生したときに、その異常を早期に発見し、かつ、プロセスを復旧させるマルチスレッドの監視方法に関する技術が開示されている。特許文献２では、プロセス内のプライマリスレッドが、当該プロセスを構成する複数のスレッドの動作をポーリングにより監視する。ここで、各スレッドにおいて異常が発生すると、当該スレッドは、プライマリスレッドの問い合わせ信号に対し、応答信号を返すことができない。応答信号の有無に基づき、プライマリスレッドは、各スレッドの動作が正常か否かを判断する。異常が発生したと判断すると、プライマリスレッドは、全てのスレッドの動作を終了させ、かつ、初期化を行う。
【００１０】
特許文献３には、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のクイックソート処理スレッドを利用して並列にクイックソートを行う並列クイックソート装置、方法及びプログラムに関する技術が開示されている。特許文献３にかかる技術では、スレッドプールに複数のクイックソート処理スレッドを用意し、初期化処理手段が該スレッドの初期化処理を行う。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０００−２２４２５１号公報
【特許文献２】特開平１１−２３２１４３号公報
【特許文献３】特許第３９７５９７５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上述したように特許文献１では、初期化スレッドが同一プロセス内の他のスレッドの初期化処理を行う。また、特許文献２では、プライマリスレッドが同一プロセス内の他のスレッドの初期化処理を行う。また、特許文献３では、初期化手段が、複数のクイックソート処理スレッドの初期化処理を行う。しかしながら、特許文献１乃至３に開示された技術は、スレッドから呼び出されるスレッドに対して、初期化処理を柔軟に設定できないという問題点がある。それは、スレッドを初期化するための初期化スレッド、プライマリスレッド又は初期化手段というものが固定的に存在するためである。
【００１３】
尚、スレッドには、呼び出し元のスレッドが明示的に作成するスレッドの他に、スレッドプールや非同期実行スレッドが存在する。呼び出し元のスレッドが明示的に作成するスレッドについては、スレッド作成後、かつ、スレッド起動前に呼び出し元のスレッドが初期化を行うことも考えられる。しかし、スレッドプールや非同期実行スレッドではスレッド管理システムが使用するスレッドを決定し起動するため、起動前に初期化を行うことができない。また、呼び出し元のスレッドは、スレッド処理の先頭に初期化を行う処理を含めることも可能だが、スレッド処理ごとに初期化処理を記述する必要があり、実装が煩雑及び非効率である。
【００１４】
本発明は、このような問題点を解決するためになされたものであり、呼び出し元のスレッドから起動されるスレッドに対して、初期化処理を柔軟に設定することができるスレッド制御システム、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の第１の態様にかかるスレッド制御システムは、第１のスレッドから、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する受信手段と、前記第１のスレッドとは異なる第２のスレッドに対して、前記指定された初期化処理情報を設定する設定手段と、前記第２のスレッドの起動時に、前記設定された初期化処理情報に基づき前記第２のスレッドに初期化処理を実行させるスレッド実行手段と、を備える。
【００１６】
本発明の第２の態様にかかるスレッド制御方法は、第１のスレッドから、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する受信ステップと、前記第１のスレッドとは異なる第２のスレッドに対して、前記指定された初期化処理情報を設定する設定ステップと、前記第２のスレッドの起動時に、前記設定された初期化処理情報に基づき前記第２のスレッドに初期化処理を実行させるスレッド実行ステップと、を含む。
【００１７】
本発明の第３の態様にかかるスレッド制御プログラムは、第１のスレッドから、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する受信ステップと、前記第１のスレッドとは異なる第２のスレッドに対して、前記指定された初期化処理情報を設定する設定ステップと、前記第２のスレッドの起動時に、前記設定された初期化処理情報に基づき前記第２のスレッドに初期化処理を実行させるスレッド実行ステップと、を含むスレッド制御処理をコンピュータに実行させる。
【発明の効果】
【００１８】
本発明によれば、呼び出し元のスレッドから起動されるスレッドに対して、初期化処理を柔軟に設定することができるスレッド制御システム、方法及びプログラムを提供することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施の形態１にかかるスレッド制御システムの構成を示すブロック図である。
【図２】本発明の実施の形態２にかかるスレッド制御システムの構成を示すブロック図である。
【図３】本発明の実施の形態２にかかるスレッド設定処理の流れを示すフローチャート図である。
【図４】本発明の実施の形態２にかかるスレッド実行処理の流れを示すフローチャート図である。
【図５】本発明の実施の形態３にかかるスレッド制御システムの構成を示すブロック図である。
【図６】本発明の実施の形態３にかかるスレッド設定処理の流れを示すフローチャート図である。
【図７】関連技術にかかるクライアント／サーバアプリケーションシステムの構成を示すブロック図である。
【発明を実施するための形態】
【００２０】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００２１】
＜発明の実施の形態１＞
図１は、本発明の実施の形態１にかかるスレッド制御システムの構成を示すブロック図である。スレッド制御システム１００は、汎用的なコンピュータシステム（不図示）上で動作するスレッド制御プログラムである。スレッド制御システム１００は、例えば、当該コンピュータシステム上で動作するオペレーティングシステム、オペレーティングシステム上で動作するミドルウェア、オペレーティングシステム又はミドルウェア上で動作するアプリケーションソフトウェアにおいて利用されるものである。
【００２２】
第１のスレッド２０１及び第２のスレッド２０２は、それぞれ上述したコンピュータシステム上で実行されるスレッドである。ここで、スレッドとは、ソフトウェアの実行単位である。スレッドは、同一プロセス内に複数存在することができる。複数のスレッドは、同一メモリ空間上で実行できる。そのため、複数のスレッドに処理を分散実行させることで、メモリ消費量などを軽減できる。
【００２３】
スレッド制御システム１００は、第１のスレッド２０１からの要求を受け付け、第２のスレッド２０２の実行を制御するものである。スレッド制御システム１００は、受信手段１０１と、設定手段１０２と、スレッド実行手段１０３とを備える。
【００２４】
受信手段１０１は、第１のスレッド２０１から、スレッドを初期化するための処理への参照先情報である初期化処理情報の指定を受信する。設定手段１０２は、受信手段１０１とは異なる設定手段１０２に対して、第１のスレッド２０１により指定された初期化処理情報を設定する。スレッド実行手段１０３は、第２のスレッド２０２の起動時に、設定手段１０２により設定された初期化処理情報に基づき、第２のスレッド２０２に初期化処理を実行させる。
【００２５】
このように、本発明の実施の形態１にかかるスレッド制御システム１００によれば、呼び出し元のスレッドである第１のスレッド２０１において、第２のスレッド２０２で実行させるための任意の初期化処理情報を指定することにより、第２のスレッド２０２の起動時の初期化処理を柔軟に制御することができる。
【００２６】
＜発明の実施の形態２＞
図２は、本発明の実施の形態２にかかるスレッド制御システムの構成を示すブロック図である。スレッド制御システム３００は、図１のスレッド制御システム１００と同等の機能に加え、スレッドプール３０を備える。
【００２７】
スレッドプール３０は、スレッド制御システム１００の起動時に作成されたスレッド３１、スレッド３２、・・・、及びスレッド３ｎ（ｎは、１以上の整数）をプールする格納領域である。スレッドプール３０は、例えば、スレッド制御システム３００が動作するコンピュータシステム（不図示）内のメモリ内に割り当てられた記憶領域である。スレッドプール３０は、スレッド制御システム３００からの割り当て要求に応じて、使用可能なスレッドにリソースを割り当てる。このとき、スレッドプール３０は、当該割り当てたスレッドのステータスを使用中とし、以後の要求に割り当てないように管理する。また、スレッドプール３０は、割り当てたスレッドについてのリソースの解放要求に応じて、当該スレッドのリソースを解放し、当該スレッドのステータスを使用可能とする。
【００２８】
スレッド３１は、スレッド制御システム１００内に定義された所定のスレッドクラス（不図示）をインスタンス化したオブジェクトである。スレッド３１は、親スレッド情報３１１、初期化処理アドレス３１２、スレッド処理アドレス３１３を含む。スレッド３１は、例えば、任意のスレッドクラスを継承し、親スレッド情報３１１、初期化処理アドレス３１２、スレッド処理アドレス３１３をフィールドとして実装されたサブクラスのインスタンスである。親スレッド情報３１１は、スレッド３１の呼び出し元のスレッドを識別する識別情報を格納する変数である。親スレッド情報３１１は、例えば、呼び出し元のスレッドのインスタンスへの参照情報である。初期化処理アドレス３１２は、スレッドを初期化するための処理である初期化処理への参照先情報を格納する変数である。初期化処理アドレス３１２は、例えば、初期化処理が実装された関数へのポインタである。スレッド処理アドレス３１３は、スレッド３１に実行させるための処理であるスレッド処理への参照先情報を格納する変数である。スレッド３１は、例えば、スレッド処理が実装された関数へのポインタである。
【００２９】
また、スレッド３２、・・・、及びスレッド３ｎは、スレッド３１と同様のスレッドクラスから生成されたインスタンスであり、スレッド３１と同様の構成を有するため、詳細な説明及び図示を省略する。
【００３０】
ここで、呼び出し元スレッド２１の備える親スレッド情報２１１、初期化処理アドレス２１２及びスレッド処理アドレス２１３、並びに、対象スレッド２２の備える親スレッド情報２２１、初期化処理アドレス２２２及びスレッド処理アドレス２２３は、スレッド３１の備える親スレッド情報３１１、初期化処理アドレス３１２及びスレッド処理アドレス３１３と同等のものであるため、説明を省略する。
【００３１】
呼び出し元スレッド２１は、スレッド制御システム３００とは異なるプログラム上で動作するスレッドのオブジェクトである。呼び出し元スレッド２１は、スレッド制御システム３００に対して、スレッド処理を行わせるスレッドの割り当て要求又は新規作成要求を送信する。その際、呼び出し元スレッド２１のスレッド処理アドレス２１３には、予め、当該スレッド処理への参照先情報が格納されている。また、呼び出し元スレッド２１は、少なくとも１つ以上のスレッドに当該スレッド処理を行わせるものである。または、呼び出し元スレッド２１は、複数のスレッド処理を複数のスレッドに実行させるように、スレッドの割り当て要求又は新規作成要求を送信しても構わない。
【００３２】
また、呼び出し元スレッド２１は、他のスレッドから呼び出されたスレッドであっても構わない。その場合、呼び出し元スレッド２１の親スレッド情報２１１には、呼び出し元スレッド２１の呼び出し元のスレッドの識別情報が格納されている。
【００３３】
そして、呼び出し元スレッド２１は、スレッドの割り当て要求又は新規作成要求を送信する際に、当該要求するスレッドに実行させる初期化処理への参照先情報を初期化処理アドレス２１２に格納する。初期化処理アドレス２１２に格納されるアドレスは、例えば、呼び出し元スレッド２１自身の初期化処理であってもよい。
【００３４】
対象スレッド２２は、呼び出し元スレッド２１からの要求に応じて、スレッド制御システム３００によりスレッド処理を実行するために設定されたスレッドのオブジェクトである。また、対象スレッド２２は、複数存在しても構わない。対象スレッド２２は、実行するスレッド処理によっては、呼び出し元スレッド２１として動作しても構わない。すなわち、対象スレッド２２は、さらに他のスレッドへスレッド処理を実行させるように、スレッドの割り当て要求又は新規作成要求を送信しても構わない。尚、呼び出し元スレッド２１及び対象スレッド２２は、スレッド制御システム３００内で動作するスレッドであっても構わない。
【００３５】
つまり、本発明の実施の形態２にかかるスレッド制御システム３００は、呼び出し元スレッド２１から初期化処理の指定を受信し、スレッドプール３０の中から取得することにより又は新規作成することにより対象スレッド２２を設定するスレッド設定処理と、対象スレッド２２に当該指定された初期化処理を実行させるスレッド実行処理とを行う。
【００３６】
図３は、本発明の実施の形態２にかかるスレッド制御システム３００におけるスレッド設定処理の流れを示すフローチャート図である。まず、スレッド制御システム３００は、呼び出し元スレッド２１からスレッド処理を行わせるスレッドの割り当て要求又は新規作成要求を受信する（Ｓ１１）。
【００３７】
次に、スレッド制御システム３００は、受信した要求が割り当て要求であるか否かを判定する（Ｓ１２）。受信した要求が割り当て要求であると判定された場合、スレッド制御システム３００は、スレッドプール３０から使用可能なスレッドを取得し、対象スレッド２２とする（Ｓ１３）。また、ステップＳ１２において、受信した要求が割り当て要求でないと判定された場合、スレッド制御システム３００は、新規にスレッドを作成し、当該作成されたスレッドを対象スレッド２２とする（Ｓ１４）。
【００３８】
続いて、スレッド制御システム３００は、呼び出し元スレッド２１の初期化処理アドレス２１２に設定があるか否かを判定する（Ｓ１５）。すなわち、スレッド制御システム３００は、初期化処理アドレス２１２を参照し、初期化処理への参照先情報が格納されているか否かを判定する。
【００３９】
ステップＳ１５において、設定があると判定された場合、スレッド制御システム３００は、呼び出し元スレッド２１の初期化処理アドレス２１２に格納された参照情報を対象スレッド２２の初期化処理アドレス２２２に設定する（Ｓ１６）。
【００４０】
また、ステップＳ１５において、設定がないと判定された場合、スレッド制御システム３００は、対象スレッド２２の初期化処理アドレス２２２に格納された情報をクリアする（Ｓ１７）。
【００４１】
尚、ステップＳ１６及びＳ１７のいずれの処理であっても、スレッド制御システム３００は、対象スレッド２２の親スレッド情報２２１に呼び出し元スレッド２１の識別情報を格納する。また、このとき併せて、スレッド制御システム３００は、呼び出し元スレッド２１のスレッド処理アドレス２１３に格納されている参照情報を対象スレッド２２のスレッド処理アドレス２２３に格納する。その後、スレッド制御システム３００は、対象スレッド２２を起動する（Ｓ１８）。
【００４２】
図４は、本発明の実施の形態２にかかるスレッド実行処理の流れを示すフローチャート図である。まず、スレッド制御システム３００は、起動した対象スレッド２２の初期化処理アドレス２２２に設定があるか否かを判定する（Ｓ２１）。すなわち、スレッド制御システム３００は、スレッド制御システム３００は、初期化処理アドレス２２２を参照し、初期化処理への参照先情報が格納されているか否かを判定する。
【００４３】
ステップＳ２１において、設定があると判定された場合、スレッド制御システム３００は、対象スレッド２２の初期化処理アドレス２２２に対応する初期化処理を対象スレッド２２にて実行する（Ｓ２２）。すなわち、スレッド制御システム３００は、対象スレッド２２の初期化処理アドレス２２２に格納された参照情報を取得し、当該参照情報の参照先の初期化処理を対象スレッド２２に対して実行する。また、ステップＳ２１において、設定がないと判定された場合、スレッド制御システム３００は、対象スレッド２２の初期化処理を実行しない。
【００４４】
その後、スレッド制御システム３００は、対象スレッド２２のスレッド処理アドレス２２３に対応する処理を対象スレッド２２にて実行する（Ｓ２３）。すなわち、スレッド制御システム３００は、対象スレッド２２のスレッド処理アドレス２２３に格納された参照情報を取得し、当該参照情報の参照先のスレッド処理を対象スレッド２２に対して実行する。
【００４５】
このように、本発明の実施の形態２では、呼び出し元スレッド２１の初期化処理アドレス２１２に格納された参照情報の初期化処理を呼び出し元スレッド２１の起動時に実行された初期化処理とする。これにより、対象スレッド２２において、親スレッドと共通の初期化処理を行うことができる。つまり、スレッドが複数及び多段に分散されていても親スレッドの情報を引き継ぐことができるという効果を奏する。そのため、親スレッドから子スレッドへ、子スレッドから孫スレッドへと情報を引き継ぐことで再帰的に引き継ぐことができる。
【００４６】
また、本発明の実施の形態２にかかるスレッド制御システム３００は、呼び出し元スレッド２１の初期化処理アドレス２１２に設定された初期化処理情報を指定として受信し、対象スレッド２２に対して、呼び出し元スレッド２１に設定された初期化処理情報を設定する。これにより、親スレッドの設定を通して初期化処理を引き継ぐことができる。
【００４７】
例えば、ＷＣＦ（Windows（登録商標） Communication Foundation）などのフレームワークを使用した場合、フレームワークからスレッド処理が起動されるため、呼び出し元のスレッドを識別することもできなくなる。さらに、フレームワークでスレッド処理に必要とされる引数などが決められているため、追加で初期化情報を渡すこともできない。これに対して、本発明の実施の形態２では、呼び出し元スレッド２１が隠ぺいされていても、対象スレッド２２の初期化処理を呼び出すことができるという効果を奏する。その理由は、フレームワークが呼び出すスレッド処理に対しても初期化処理を適用できるためである。また、フレームワーク内で使用されるスレッド数に依らない。
【００４８】
また、スレッド制御システム３００は、対象スレッド２２に対して、呼び出し元スレッド２１を呼び出し元のスレッドとしてさらに設定することにより、対象スレッド２２の親スレッド情報２２１から親スレッドを参照できる。
【００４９】
さらに、スレッド制御システム３００は、呼び出し元スレッド２１の初期化処理アドレス２１２に初期化処理情報が設定されていない場合に、対象スレッド２２の初期化処理アドレス２２２をクリアし、対象スレッド２２の起動時に、対象スレッド２２に初期化処理を実行させないことにより、初期化処理を実行しないことを指定することができ、不要な処理コストを抑えることができる。
【００５０】
また、本発明の実施の形態２では、フレームワークによりスレッド処理の引数があらかじめ決められていても初期化処理を行うことができるという効果を奏する。その理由は、スレッド処理の引数とは別に初期化処理を適用できるためである。さらに、本発明の実施の形態２では、初期化処理を一元化できるという効果を奏する。その理由は、個々のスレッドの処理とは切り離して設計できるためである。
【００５１】
＜発明の実施の形態３＞
図５は、本発明の実施の形態３にかかるスレッド制御システムの構成を示すブロック図である。図５に示すスレッド制御システム３０１は、図２のスレッド制御システム３００に加え、グローバル格納領域３０ａが追加されたものである。尚、図５の内、図２と同一の構成要素には、同一の符号を付し、詳細な説明は、省略する。
【００５２】
グローバル格納領域３０ａは、スレッドを初期化するための処理である初期化処理への参照先情報を格納する変数である。言い換えると、グローバル格納領域３０ａは、初期化処理情報を格納する処理情報格納手段である。また、グローバル格納領域３０ａは、初期化処理アドレス３１２と異なり、スレッド制御システム３００内のあらゆる処理から参照可能な領域である。そのため、例えば、呼び出し元スレッド２１を実行する前に、予め外部からグローバル格納領域３０ａに所定の初期化処理アドレスを格納することができる。
【００５３】
図６は、本発明の実施の形態３にかかるスレッド設定処理の流れを示すフローチャート図である。尚、図６の内、図３と同一の構成要素には、同一の符号を付し、詳細な説明は、省略する。以下では、図３との違いを中心に説明する。まず、前提として、スレッド制御システム３０１は、予め外部から入力された初期化アドレスをグローバル格納領域３０ａに格納済みである。また、ステップＳ１１乃至Ｓ１５は、図３と同様の処理である。
【００５４】
ここで、ステップＳ１５において、設定がないと判定された場合、スレッド制御システム３０１は、グローバル格納領域３０ａに初期化処理アドレスの設定があるか否かを判定する（Ｓ１５ａ）。すなわち、スレッド制御システム３０１は、グローバル格納領域３０ａを参照し、初期化処理への参照先情報が格納されているか否かを判定する。
【００５５】
ステップＳ１５ａにおいて、設定があると判定された場合、スレッド制御システム３０１は、グローバル格納領域３０ａに格納された参照情報を対象スレッド２２の初期化処理アドレス２２２に設定する（Ｓ１６ａ）。
【００５６】
また、ステップＳ１５ａにおいて、設定がないと判定された場合、スレッド制御システム３０１は、対象スレッド２２の初期化処理アドレス２２２に格納された情報をクリアする（Ｓ１７）。
【００５７】
また、ステップＳ１６ａの処理後は、ステップＳ１６又はＳ１７と同様に、スレッド制御システム３０１は、対象スレッド２２の親スレッド情報２２１に呼び出し元スレッド２１の識別情報を格納する。また、このとき併せて、スレッド制御システム３０１は、呼び出し元スレッド２１のスレッド処理アドレス２１３に格納されている参照情報を対象スレッド２２のスレッド処理アドレス２２３に格納する。その後、スレッド制御システム３０１は、対象スレッド２２を起動する（Ｓ１８）。続いて、スレッド制御システム３０１は、対象スレッド２２に対して、図４と同様のスレッド実行処理を行う。
【００５８】
つまり、スレッド制御システム３０１は、呼び出し元スレッド２１の初期化処理アドレス２１２に初期化処理アドレスが設定されておらず、グローバル格納領域３０ａに初期化処理アドレスが設定されている場合を、呼び出し元スレッド２１から処理情報格納手段に格納された初期化処理情報を指定されたものとして受信する。そして、スレッド制御システム３０１は、対象スレッド２２に対して、処理情報格納手段に格納された初期化処理情報を設定する。これにより、複数の対象スレッド２２に対して、共通の初期化処理を一回の設定により指定可能となる。また、この場合、都度、呼び出し元スレッド２１において、初期化処理アドレス２１２に初期化処理アドレスを設定する必要がなく実装が効率的となる。
【００５９】
＜その他の発明の実施の形態＞
尚、スレッドプールに格納されたスレッドは、既に起動されているために、従来は、クライアントアプリケーション７１から受信した処理を格納することができず、サーバアプリケーション７２においてはスレッドプールが使用できない問題があった。本発明は、スレッドプールに格納されたスレッドが初期化処理アドレス３１２を有するため、割り当てられたスレッドの実行開始時に初期化処理アドレス３１２に設定された初期化処理を実行させることが可能となる。
【００６０】
尚、本発明にかかるスレッド制御システムは、オペレーティングシステムやスレッドライブラリに利用可能である。
【００６１】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【符号の説明】
【００６２】
１００  スレッド制御システム
１０１  受信手段
１０２  設定手段
１０３  スレッド実行手段
２０１  第１のスレッド
２０２  第２のスレッド
２１  呼び出し元スレッド
２１１  親スレッド情報
２１２  初期化処理アドレス
２１３  スレッド処理アドレス
２２  対象スレッド
２２１  親スレッド情報
２２２  初期化処理アドレス
２２３  スレッド処理アドレス
３００  スレッド制御システム
３０１  スレッド制御システム
３０  スレッドプール
３０ａ  グローバル格納領域
３１  スレッド
３１１  親スレッド情報
３１２  初期化処理アドレス
３１３  スレッド処理アドレス
３２  スレッド
３ｎ  スレッド
７１  クライアントアプリケーション
７２  サーバアプリケーション
７２１  データ受信部
７２２  処理ディスパッチ部
７２３  処理実行部
７２４  処理実行部
【図１】
2010204874.tif 000003
【図２】
2010204874.tif 000004
【図３】
2010204874.tif 000005
【図４】
2010204874.tif 000006
【図５】
2010204874.tif 000007
【図６】
2010204874.tif 000008
【図７】
2010204874.tif 000009