(57)【要約】  ＯＳが、ブラウザ処理に含まれるバナー表示処理１とバナー表示処理２との共通変数ａの値の格納先を、該共通変数ａの書き込み要求で定義された特定の格納先からスレッドごとにそれぞれ異なる格納先をメモリ上に設定する。ＯＳが、バナー表示処理２からの共通変数ａの書き込み要求を検出すると、バナー表示処理２の共通変数ａの値の格納先に検出した書き込み要求の共通変数ａの値を格納する。ＯＳが、バナー表示処理１からの共通変数ａの書き込み要求を検出すると、バナー表示処理１の共通変数ａの値の格納先に検出した書き込み要求の共通変数ａの値を格納する。ＯＳが、バナー表示処理１およびバナー表示処理２の終了を検出すると、共通変数ａの各値をテーブルに登録された順番に読み出し、読み出した共通変数ａの値を特定の格納先へ上書きする。共通変数ａの値にはバナー表示処理２の共通変数ａの値である５が保持される。
2012046301.tif 000002
【特許請求の範囲】
【請求項１】
対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定する設定手段と、
前記スレッド群のスレッドごとに前記共通変数の値を前記設定手段により設定された前記スレッドの格納先に格納する第１の格納手段と、
前記スレッド群のすべてのスレッドが終了すると、前記第１の格納手段により前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする第２の格納手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記第１の格納手段は、
前記設定手段により前記スレッド群のうちの一のスレッドの格納先が設定されなかった場合において、前記スレッド群のうちの前記一のスレッドよりも前記実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していれば、前記特定の格納先へ前記一のスレッドの共通変数の値を格納することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
実行中のスレッドから異なるスレッドに実行を切り替える切り替え手段を備え、
前記第１の格納手段は、
前記設定手段により前記スレッド群のうちの一のスレッドの格納先が設定されなかった場合において、前記スレッド群のうちの前記一のスレッドよりも前記実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していなければ、前記特定の格納先へ前記一のスレッドの共通変数の値を格納せず、
前記切り替え手段は、
前記一のスレッドから他のスレッドに実行を切り替えることを特徴とする請求項１に記載の情報処理装置。
【請求項４】
対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定する設定工程と、
前記スレッド群のスレッドごとに前記共通変数の値を前記設定工程により設定された前記スレッドの格納先に格納する第１の格納工程と、
前記スレッド群のすべてのスレッドが終了すると、前記第１の格納工程により前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする第２の格納工程と、
をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項５】
対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定する設定工程と、
前記スレッド群のスレッドごとに前記共通変数の値を前記設定工程により設定された前記スレッドの格納先に格納する第１の格納工程と、
前記スレッド群のすべてのスレッドが終了すると、前記第１の格納工程により前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする第２の格納工程と、
をコンピュータが実行することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書き込み要求を制御する情報処理装置、情報処理プログラム、および情報処理方法に関する。
【背景技術】
【０００２】
従来より、マルチスレッド処理では１つのプロセスを複数のスレッドに分割し、該複数のスレッドを平行して実行させる。変数によっては複数のスレッド間で書き込みが行われる。ここで、複数のスレッド間で書き込みが行われる変数を共通変数と称する。【０００３】
シングルコアプロセッサシステムにおいて共通変数を有するスレッドを実行するには逐次処理を行うことで、スレッドの実行順序が変わってしまうことにより最終的な共通変数の値が異なるのを防止することができる。【０００４】
ここで、共通変数に関して、ブラウザ処理のバナー表示処理を例に挙げて説明する。バナー表示処理では表示するデータを共有メモリへ格納する。バナー表示処理が複数ある場合、各バナー表示で表示するデータをＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）文書に記載されたバナーの表示順（Ｚオーダー）に沿ってメモリへ格納する。表示によってはバナー同士が重なって表示される場合があるため、バナーの表示順を遵守してバナー表示処理が実行されなければならないため、上述したように逐次処理が行われる。【０００５】
また、共有メモリ型マルチコアプロセッサシステムでは、各スレッドはマルチコアプロセッサから任意のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に割り当てられることで、該スレッドの処理が実行される。マルチコアプロセッサシステムでは、各ＣＰＵが他のＣＰＵの実行状況に関係なく、該各ＣＰＵに割り当てられたスレッドを実行する。各ＣＰＵは共通変数を有するスレッドを実行する場合、該共通変数を有する他のすべてのスレッドと逐次処理を行うか同期処理を行う必要がある。【０００６】
また、ＣＰＵごとに共通変数をそれぞれのＣＰＵのキャッシュ上に格納し、ＣＰＵ間通信を行うことで、他のスレッドの実行状況に基づいて共有メモリへ共通変数を書き込んでいた（たとえば、下記特許文献１，２を参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３００４９号公報
【特許文献２】特開平１０−１１６１９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、逐次処理ではスループットが低下する問題点があり、同期処理ではオーバーヘッドにより実行効率が低下してしまう問題点があった。また、マルチコアプロセッサシステムにおいて、ＣＰＵごとに共通変数をそれぞれのＣＰＵのキャッシュ上に格納する場合、複数のスレッドが同一ＣＰＵに割り当てられると、逐次処理を行うため、スループットが低下する問題点があった。さらに、ＣＰＵ間通信によってオーバーヘッドが発生し、実行効率が低下してしまう問題点があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、スループットおよび実行効率を向上させることができる情報処理装置、情報処理プログラム、および情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一観点によれば、対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの前記共通変数の値の格納先を、前記書き込み要求で定義された特定の格納先から前記スレッドごとにそれぞれ異なる格納先に設定し、前記スレッド群のスレッドごとに前記共通変数の値を設定された前記スレッドの格納先に格納し、前記スレッド群のすべてのスレッドが終了すると、前記スレッドごとに格納された前記共通変数の各値を前記対象プロセスで定義された前記スレッド群の実行順に読み出し、読み出した前記共通変数の各値を前記実行順に前記特定の格納先へ上書きする情報処理装置、情報処理プログラム、および情報処理方法が提供される。
【発明の効果】
【００１１】
本情報処理装置、情報処理プログラム、および情報処理方法によれば、スループットおよび実行効率を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施例を示す説明図である。
【図２】情報処理装置のハードウェアを示すブロック図である。
【図３】共通変数情報の一例を示す説明図である。
【図４】スレッドリストの一例を示す説明図である。
【図５】情報処理装置２００を示すブロック図である。
【図６】逐次処理フラグの設定例を示す説明図である。
【図７】スレッド１の割り当て例を示す説明図である。
【図８】スレッド１〜スレッド４の割り当て例を示す説明図である。
【図９】スレッド１から共通変数Ａの書き込み要求の検出例を示す説明図である。
【図１０】スレッド１から共通変数Ｂの書き込み要求の検出例を示す説明図である。
【図１１】スレッド３から共通変数Ａの書き込み要求の検出例を示す説明図である。
【図１２】スレッド３の終了例を示す説明図である。
【図１３】スレッド２の終了例を示す説明図である。
【図１４】共有キャッシュ２０２から共有メモリ２０１へ格納する例を示す説明図である。
【図１５】出力領域の解放例を示す説明図である。
【図１６】スレッド２の出力領域が設定されていない例を示す説明図である。
【図１７】スレッド２からスレッド６へディスパッチされる例を示す説明図である。
【図１８】逐次処理フラグがセットされた場合の共通変数Ａへの書き込み要求例を示す説明図である。
【図１９】スレッド１の処理終了後にスレッド２がディスパッチされる例を示す説明図である。
【図２０】ＯＳ２３０による情報処理手順を示すフローチャートである。
【図２１】各ＯＳによる情報処理手順を示すフローチャート（その１）である。
【図２２】各ＯＳによる情報処理手順を示すフローチャート（その２）である。
【図２３】書き込みスレッドによる情報処理手順を示すフローチャート（その１）である。
【図２４】書き込みスレッドによる情報処理手順を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかる情報処理装置、情報処理プログラム、および情報処理方法の好適な実施の形態を詳細に説明する。
【００１４】
図１は、本発明の一実施例を示す説明図である。ここでは、アプリケーションの一例として、ブラウザ内のバナー表示１およびバナー表示２を挙げる。図１では、ブラウザのバナー表示の重なり箇所を共通変数ａとしている。テーブル１００はブラウザ処理のスレッドの実行順序を示す情報である。テーブル１００では、スレッドＩＤの項目１０１と順番の項目１０２とを有している。スレッドＩＤの項目１０１にはスレッドの識別情報が登録されている。順番の項目１０２には実行順番が登録されている。実行順番はブラウザ処理がＨＴＭＬ文書を解析することにより得られる情報である。テーブル１０３は共通変数ａを有するスレッドごとの共通変数ａの値の格納先を示す情報である。テーブル１０３はスレッドＩＤの項目１０４と共通変数ａの格納先の項目１０５とを有している。
【００１５】
まず、ＯＳが、ブラウザ処理が起動されると、ブラウザ処理に含まれるバナー表示処理１とバナー表示処理２との共通変数ａの値の格納先を、該共通変数ａの書き込み要求で定義された特定の格納先からスレッドごとにそれぞれ異なる格納先をメモリ上に確保する。そして、ＯＳが、（１）テーブル１０３に確保した各格納先を設定する。
【００１６】
つぎに、ＯＳが、（２）バナー表示処理２からの共通変数ａの書き込み要求を検出すると、（３）バナー表示処理２の共通変数ａの値の格納先に検出した書き込み要求の共通変数ａの値を格納する。つぎに、ＯＳが、（４）バナー表示処理１からの共通変数ａの書き込み要求を検出すると、（５）バナー表示処理１の共通変数ａの値の格納先に検出した書き込み要求の共通変数ａの値を格納する。
【００１７】
そして、ＯＳが、バナー表示処理１およびバナー表示処理２の終了を検出すると、共通変数ａの各値をテーブル１０３に登録された番号の順番に読み出し、（６）読み出した共通変数ａの値を特定の格納先へ上書きする。共通変数ａの値にはバナー表示処理２の共通変数ａの値である５が登録される。
【００１８】
バナー表示処理２における共通変数ａの値の書き込み処理のあとに、バナー表示処理１における共通変数ａの値の書き込み処理が実行されても、共通変数ａの値はバナー表示処理２における共通変数ａの値となる。
【００１９】
本実施の形態では情報処理装置の一例としてマルチコアプロセッサシステムを挙げて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００２０】
また、本実施の形態では、各スレッドの格納先を各スレッドの出力領域と称し、実行順を優先度としている。本実施の形態ではスレッドの優先度の値が１であれば、最も優先度が低いスレッドであり、優先度の値が大きくなれば、優先度が高いスレッドとなる。優先度が低いスレッド順に特定の格納先へ該スレッドの出力領域に格納された共通変数の値が格納される。
【００２１】
（情報処理装置のハードウェア）
図２は、情報処理装置のハードウェアを示すブロック図である。図２において、情報処理装置２００は、ＣＰＵ＃０と、ＣＰＵ＃１と、共有キャッシュ２０２と、共有メモリ２０１と、を有している。ＣＰＵ＃０と、ＣＰＵ＃１と、共有キャッシュ２０２とは、それぞれバス２０３を介して接続されている。
【００２２】
ＣＰＵ＃０は、分散キャッシュ２１０と、レジスタと、コアと、を有している。ＣＰＵ＃１は、分散キャッシュ２１１と、レジスタと、コアと、を有している。ＣＰＵ＃０はＯＳ２３０を実行し、情報処理装置２００の全体の制御を司る。ＯＳ２３０はマスタＯＳであり、スレッドをどのＣＰＵに割り当てるかを制御する機能を有し、該ＣＰＵ＃０に割り当てられたスレッドを実行する。ＣＰＵ＃１はＯＳ２３１を実行し、ＯＳ２３１に割り当てられたスレッドを実行する。ＯＳ２３１はスレーブＯＳであり、ＣＰＵ＃１に割り当てられたスレッドを実行する。
【００２３】
実行待ちキュー２２３は、マスタＯＳであるＯＳ２３０が有するキューである。たとえば、割り当て指示が発生したスレッドは実行待ちキュー２２３に入れられ、ＯＳ２３０が実行待ちキュー２２３からスレッドを取り出し、ＯＳ２３０がどのＣＰＵに割り当てるかを決定する。
【００２４】
レディーキュー２２０は、ＯＳ２３０が有するキューである。ＣＰＵ＃０に割り当てられたスレッドで、実行待機状態であるスレッドはすべてレディーキュー２２０に登録される。レディーキュー２２０に登録されたスレッドは、ＯＳ２３０によって登録された順や優先度に応じて取り出され、ＣＰＵ＃０に実行される。
【００２５】
レディーキュー２２１は、ＯＳ２３１が有するキューである。ＣＰＵ＃１に割り当てられたスレッドで、実行待機状態であるスレッドはすべてレディーキュー２２１に登録される。レディーキュー２２１に登録されたスレッドは、ＯＳ２３１によって登録された順や優先度に応じて取り出され、ＣＰＵ＃１に実行される。
【００２６】
分散キャッシュ２１０と分散キャッシュ２１１とはスヌープバス２１２を介して接続されている。スヌープバス２１２は分散キャッシュ２１０と分散キャッシュ２１１とで共有されるデータの更新を一方の分散キャッシュで検出すると、他方の分散キャッシュ内の該共有されるデータを更新する。
【００２７】
共有キャッシュ２０２は、具体的には、たとえば、ＲＡＭであって、ＣＰＵ＃０とＣＰＵ＃１とに共有されるキャッシュである。
【００２８】
共有メモリ２０１は、具体的には、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを有している。たとえば、フラッシュＲＯＭがブートプログラムを記憶し、ＲＯＭがアプリケーションソフトウェアを記憶し、ＲＡＭがＣＰＵ＃０〜ＣＰＵ＃１のワークエリアとして使用される。共有メモリ２０１に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理を該各ＣＰＵに実行させることとなる。共有メモリ２０１は、たとえば、スレッドリストと、共通変数情報と、スレッド管理テーブルと、を記憶している。
【００２９】
スレッド管理テーブルについては図示しないが、具体的には、たとえば、各スレッドがいずれのＣＰＵに割り当てられたかを保持するテーブルである。本実施の形態では、共通変数を含むスレッドについては、処理終了フラグを各分散キャッシュ上に設定して、該スレッドの処理が終了したか否かを各ＯＳが管理している。これに限らず、スレッド管理テーブル上で各スレッドの処理状態を管理してもよい。
【００３０】
図３は、共通変数情報の一例を示す説明図である。共通変数情報３００はプロセスＡ内の共通変数に関する情報である。共通変数情報３００はアドレス情報の項目３０１とサイズの項目３０２とスレッドＩＤの項目３０３とを有している。アドレス情報の項目３０１には共有メモリ２０１上のアドレス情報が保持され、サイズの項目３０２はアドレス情報の項目３０１に保持されている。スレッドＩＤの項目３０３は共通変数を含むスレッドの識別情報が保持されている。
【００３１】
プロセスＡの共通変数は、共有メモリ２０１上の共通変数Ａのアドレスに格納される変数と共有メモリ２０１上の共通変数Ｂのアドレスに格納される変数である。共通変数Ａはスレッド１とスレッド２とスレッド３とに共通する変数であり、共通変数Ｂはスレッド１とスレッド２とスレッド４とに共通する変数である。
【００３２】
図４は、スレッドリストの一例を示す説明図である。スレッドリスト４００は、プロセスＩＤの項目４０１と、スレッドＩＤの項目４０２と、優先度の項目４０３と、出力領域の項目４０４と、出力領域設定値の項目４０５と、を有している。
【００３３】
プロセスＩＤの項目４０１には共通変数を有するプロセスの識別情報が保持されている。スレッドＩＤの項目４０２には、プロセスＩＤの項目４０１に識別情報が保持されているプロセスの各スレッドの識別情報が保持されている。
【００３４】
優先度の項目４０３には、スレッドＩＤの項目４０２に識別情報が保持されている各スレッドの優先度が保持されている。
【００３５】
出力領域の項目４０４には、スレッドＩＤの項目４０２に識別情報が保持されている各スレッドの共通変数のキャッシュ上に設定される出力領域のアドレスが保持されている。
【００３６】
出力領域設定値の項目４０５には、スレッドＩＤの項目４０２に識別情報が保持されている各スレッドの共通変数のキャッシュ上に設定される出力領域のサイズが保持されている。各出力領域のサイズは、共通変数のアドレスのサイズと、共通変数のサイズと、共通変数の書き込みフラグのサイズと、の３つの情報を保持可能なサイズである。
【００３７】
本実施の形態では、共通変数Ａと共通変数Ｂとの２つの共通変数を例に挙げて説明するため、いずれの共通変数が該共通変数を含む各スレッドの出力領域に格納済であるかを各ＯＳが判別する。そのため、該各スレッドの割り当て時に、該スレッドの割り当てを行うＯＳ２３０が、各スレッドが有する共通変数ごとに書き込みフラグを出力領域上に設定する。
【００３８】
ここでは、プロセスＩＤの項目４０１と、スレッドＩＤの項目４０２と、優先度の項目４０３と、出力領域設定値の項目４０５と、については、あらかじめ情報処理装置２００の設計者により登録されていることとする。
【００３９】
たとえば、スレッドリスト４００内のプロセスＩＤの項目４０１に登録されているプロセスＡを例に挙げると、プロセスＡ内で共通変数を有するスレッドはスレッド１〜スレッド４であるプロセスＡで定義されたスレッド群の実行順序はスレッド１〜スレッド４の順である。
【００４０】
（情報処理装置２００のブロック図）
図５は、情報処理装置２００を示すブロック図である。情報処理装置２００は、設定部５０１と、第１の格納部５０２と、第２の格納部５０３と、切り替え部５０４と、を有している。設定部５０１は、共有メモリ２０１に記憶された情報処理プログラムを有するＯＳ２３０をＣＰＵ＃０が実行することにより、該部の機能が実現される。第１の格納部５０２および切り替え部５０４は、共有メモリ２０１に記憶された情報処理プログラムを有するＯＳを各ＣＰＵが実行することにより、該部の機能が実現される。第２の格納部５０３は共有メモリ２０１に記憶された情報処理プログラムを有する書き込みスレッドをいずれかのＣＰＵが実行することにより、該部の機能が実現される。
【００４１】
設定部５０１は、対象プロセス内の同一の共通変数の値についての書き込み要求を有するスレッド群の各スレッドの共通変数の値の格納先を、書き込み要求で定義された特定の格納先からスレッドごとにそれぞれ異なる格納先に設定する。本実施の形態では、スレッドごとにそれぞれ異なる格納先を共有キャッシュ２０２内に設定する。
【００４２】
第１の格納部５０２は、スレッド群のスレッドごとに共通変数の値を設定部５０１により設定されたスレッドの格納先に格納する。
【００４３】
第２の格納部５０３は、スレッド群のすべてのスレッドが終了すると、第１の格納部５０２によりスレッドごとに格納された共通変数の各値を対象プロセスで定義されたスレッド群の実行順に読み出し、読み出した共通変数の各値を実行順に特定の格納先へ上書きする。
【００４４】
また、第１の格納部５０２は、設定部５０１によりスレッド群のうちの一のスレッドの格納先が設定されなかった場合において、スレッド群のうちの一のスレッドよりも実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していれば、特定の格納先へ前記一のスレッドの共通変数の値を格納する。
【００４５】
また、第１の格納部５０２は、設定部５０１により前記スレッド群のうちの一のスレッドの格納先が設定されなかった場合において、スレッド群のうちの一のスレッドよりも実行順が先であるすべてのスレッドの共通変数の値についての書き込み要求が終了していなければ、特定の格納先へ一のスレッドの共通変数の値を格納しない。
【００４６】
切り替え部５０４は、第１の格納部５０２により特定の格納先へ一の共通変数の値が格納されなかった場合、一のスレッドから他のスレッドに実行を切り替える。
【００４７】
図６は、逐次処理フラグの設定例を示す説明図である。まず、ＯＳ２３０が、スレッドリスト４００内のプロセスＩＤの項目４０１に保持されているプロセスごとに逐次処理フラグを各分散キャッシュ上に設定する。図６ではプロセスＡの逐次処理フラグのみを示す。
【００４８】
また、ＯＳ２３０が、各分散キャッシュ上に設定した逐次処理フラグの領域を保護する。ここで、分散キャッシュ上の領域を保護するとは、具体的には、該領域を追い出し禁止に設定し、他の変数の書き込みを禁止することを示している。なお、たとえば、逐次処理フラグの分散キャッシュ上におけるアドレスについては共有メモリ２０１に記憶させる。
【００４９】
図７は、スレッド１の割り当て例を示す説明図である。ＯＳ２３０が、（１）実行待ちキュー２２３からスレッド１を検出すると、ＯＳ２３０が、（２）スレッドリスト４００から検出したスレッド１の識別情報とスレッド１が所属するプロセスＡの識別情報とを検索することにより、該スレッド１が共通変数を有するスレッドであるか否かを判断する。ここでは、プロセスＡのスレッド１は共通変数を含むスレッドであると判断される。
【００５０】
つぎに、ＯＳ２３０が、スレッド１が所属するプロセスＡの逐次処理フラグがセットされているか否かを判断する。逐次処理フラグはセットされていないため、書き込みスレッドが実行中であるか否かをＯＳ２３０が判断する。書き込みスレッドは実行されていないため、ＯＳ２３０が、（３）ＣＰＵ＃１へ書き込みスレッドを割り当てる。
【００５１】
つぎに、ＯＳ２３０が、（４）スレッドリスト４００内のスレッド１に関する出力領域設定値に基づいて共有キャッシュ２０２内の領域にスレッド１の出力領域を設定する。ＯＳ２３０が、スレッド１の出力領域が設定された共有キャッシュ２０２内の領域を保護する。ここで、共有キャッシュ２０２内の領域を保護するとは、具体的には、たとえば、該領域に他の変数の書き込みを禁止することを示している。
【００５２】
また、スレッド１の出力領域のうち、後方の１バイト目の領域は共通変数Ｂの書き込みフラグであり、後方の２バイト目の領域は共通変数Ａの書き込みフラグである。つぎに、ＯＳ２３０が、（５）各分散キャッシュ上にスレッドの処理終了フラグの領域を設定し、該領域を保護する。そして、ＯＳ２３０が、（６）スレッド１をＣＰＵ＃０に割り当てる。
【００５３】
図８は、スレッド１〜スレッド４の割り当て例を示す説明図である。図８では、スレッド１とスレッド３とがＣＰＵ＃０に割り当てられ、スレッド２とスレッド４とがＣＰＵ＃１に割り当てられている。スレッドリスト４００では、スレッド１の出力領域の項目４０４に０ｘ０１１〜０ｘ０２９が登録され、スレッド２の出力領域の項目４０４に０ｘ０３ａ〜０ｘ０５２が登録され、スレッド３の出力領域の項目４０４に０ｘ０５３〜０ｘ０５ｅが登録され、スレッド４の出力領域の項目４０４に０ｘ０５ｆ〜０ｘ０６ｃが登録されている。
【００５４】
図９は、スレッド１から共通変数Ａの書き込み要求の検出例を示す説明図である。ＯＳ２３０が、スレッド１からの共通変数Ａの書き込み要求を検出する。具体的には、たとえば、ＯＳ２３０が、スレッド１からの書き込み要求を検出すると、書き込み先のアドレスが共通変数情報３００に保持されているアドレスであるか否かを判断することにより、共通変数の書き込み要求を検出することができる。
【００５５】
つぎに、ＯＳ２３０が、スレッドリスト４００内からスレッド１の出力領域を特定し、共通変数Ａのアドレスと、共通変数Ａの値とを共有キャッシュ２０２上の特定した出力領域に格納する。さらに、ＯＳ２３０が、スレッド１の出力領域内の共通変数Ｂの書き込みフラグに値が設定されていないことを確認すると、ＯＳ２３０が、スレッド１の出力領域内の共通変数Ａの書き込みフラグに１を設定する。これにより、共通変数Ａのアドレスと共通変数Ａの値とがスレッド１の出力領域に格納済であり、かつスレッド１の出力領域の先頭に格納されていることをＯＳ２３０が判別することができる。
【００５６】
図１０は、スレッド１から共通変数Ｂの書き込み要求の検出例を示す説明図である。ＯＳ２３０が、スレッド１からの共通変数Ｂの書き込み要求を検出する。つぎに、ＯＳ２３０が、スレッドリスト４００内からスレッド１の出力領域を特定し、共通変数Ｂのアドレスと、共通変数Ｂの値とを共有キャッシュ２０２上の特定した出力領域に格納する。さらに、ＯＳ２３０が、スレッド１の出力領域内の共通変数Ａの書き込みフラグに１が設定されていることを確認すると、ＯＳ２３０が、スレッド１の出力領域内の共通変数Ｂの書き込みフラグに２を設定する。
【００５７】
図１１は、スレッド３から共通変数Ａの書き込み要求の検出例を示す説明図である。ＯＳ２３０が、スレッド３からの共通変数Ａの書き込み要求を検出する。つぎに、ＯＳ２３０が、スレッドリスト４００内からスレッド３の出力領域を特定し、共通変数Ａのアドレスと共通変数Ａの値とを共有キャッシュ２０２上の特定した出力領域に格納する。
【００５８】
図１２は、スレッド３の終了例を示す説明図である。図１２では、共有キャッシュ２０２上の各スレッドに設定された出力領域に各スレッドの共通変数が格納されている。ＯＳ２３０が、（１）スレッド３の終了を検出すると、（２）分散キャッシュ２１０上のスレッド３の処理終了フラグを１に設定する。スヌープバス２１２は、（３）分散キャッシュ２１０上のスレッド３の処理終了フラグの変化を検出すると、（４）分散キャッシュ２１１上のスレッド３の処理終了フラグを更新する。
【００５９】
図１３は、スレッド２の終了例を示す説明図である。図１３では、スレッド１の実行とスレッド３の実行とスレッド４の実行とが終了している。ＯＳ２３１が、（１）スレッド２の終了を検出すると、（２）分散キャッシュ２１１上のスレッド２の処理終了フラグを１に設定する。スヌープバス２１２は、（３）分散キャッシュ２１１上のスレッド２の処理終了フラグの変化を検出すると、（４）分散キャッシュ２１０上のスレッド２の処理終了フラグを更新する。
【００６０】
図１４は、共有キャッシュ２０２から共有メモリ２０１へ格納する例を示す説明図である。書き込みスレッドが、（１）プロセスＡで共通変数を有するスレッド群のすべてのスレッドの終了を該各スレッドの処理終了フラグに基づいて検出する。書き込みスレッドが、（２）スレッドリスト４００からプロセスＡで定義されたスレッド群の優先度を特定し、共通変数の値を共有キャッシュ２０２から共有メモリ２０１の各共通変数の領域に格納する。
【００６１】
たとえば、書き込みスレッドが、プロセスＡの中で最も優先度が低いのはスレッド１であるため、（３）共有キャッシュ２０２内のスレッド１の出力領域から共通変数Ａの値を読み出す。スレッド１の出力領域内で共通変数Ａの値であるか共通変数Ｂの値であるかは各共通変数の書き込みフラグにより書き込みスレッドが判断することができる。共通変数Ａの書き込みフラグが１であり、共通変数Ｂの書き込みフラグが２である。
【００６２】
よって、共通変数Ａのアドレスおよび共通変数Ａの値のつぎに、共通変数Ｂのアドレスおよび共通変数Ｂの値が格納されていることを書き込みスレッドは特定する。さらに、各共通変数のサイズについては書き込みスレッドが共通変数情報３００を参照することにより特定することができる。これにより、書き込みスレッドは共通変数Ａの値を読み出すことができる。
【００６３】
そして、書き込みスレッドが、（４）読み出した共通変数Ａの値を共有メモリ２０１の共通変数Ａの領域に格納する。共通変数Ａの領域については、共通変数Ａの値と併せて格納された共通変数Ａのアドレスにより特定することができる。
【００６４】
図１５は、出力領域の解放例を示す説明図である。図１５では、共有メモリ２０１内の共通変数Ａの値は５であり、共有メモリ２０１内の共通変数Ａの値はスレッド３での書き込み要求の共通変数Ａの値である。図１５では、共有メモリ２０１内の共通変数Ｂの値は４であり、共有メモリ２０１内の共通変数Ｂの値はスレッド４での書き込み要求の共通変数Ｂの値である。
【００６５】
書き込みスレッドが、（１）共有キャッシュ２０２内に設定されたプロセスＡに関する出力領域を解放し、書き込みスレッドが、（２）スレッドリスト４００内のプロセスＡに関する出力領域の値を削除する。そして、書き込みスレッドが、（３）スレッド１〜スレッド４のそれぞれの処理完了フラグを各分散キャッシュから削除する。スレッドリスト４００内に登録されているプロセスのすべてのスレッドの実行が終了すると、書き込みスレッドは処理を終了する。
【００６６】
つぎに、共有変数を有するスレッドの出力領域が共有キャッシュ２０２内に設定できない場合に、逐次処理を行う例を説明する。
【００６７】
図１６は、スレッド２の出力領域が設定されていない例を示す説明図である。ここでは、共通変数Ａのみを例に挙げ、共通変数Ａを有するスレッド１〜スレッド３と、いずれの共通変数も有さないスレッド５およびスレッド６と、を用いて説明する。よって、スレッドリスト４００内の出力領域設定値が共通変数Ａのみの設定値となっている。スレッド１とスレッド３とスレッド５とがＣＰＵ＃０に割り当てられ、スレッド２とスレッド６とがＣＰＵ＃１に割り当てられている。さらに、スレッド３の出力領域には共通変数Ａの値が格納されていることとする。
【００６８】
まず、ＯＳ２３１が、（１）スレッド２からの共通変数Ａへの書き込み要求を検出すると、ＯＳ２３１がスレッドリスト４００内からスレッド２の出力領域を特定する。ここで、（２）特定された出力領域が共通変数Ａの値を格納可能な領域でないため、ＯＳ２３１が、（３）スレッド２が所属するプロセスＡの逐次処理フラグをセットする。特定された出力領域が共通変数Ａの値を格納可能な領域であるか否かについては、ＯＳ２３１が該出力領域と出力領域設定値とを比較することにより判断することができる。
【００６９】
そして、スヌープバス２１２が、（４）分散キャッシュ２１１内のプロセスＡの逐次処理フラグがセットされたことを検出すると、（５）分散キャッシュ２１０内のプロセスＡの逐次処理フラグを更新する。
【００７０】
図１７は、スレッド２からスレッド６へディスパッチされる例を示す説明図である。ＯＳ２３１が、スレッド２の所属するプロセスのスレッドの中で、スレッド２より優先度の低いスレッドを特定する。ここでは、スレッド１が特定される。定義された優先度がスレッド２よりも先のスレッド１の処理終了フラグが処理完了値でないため、ＯＳ２３１が、スレッド２からレディーキュー２２１に登録されているスレッド６へディスパッチする。
【００７１】
図１８は、逐次処理フラグがセットされた場合の共通変数Ａへの書き込み要求例を示す説明図である。まず、ＯＳ２３０が、（１）スレッド３からスレッド１へのディスパッチを検出する。そして、スレッド１の所属するプロセスＡの逐次処理フラグがセットされているため、ＯＳ２３０が、スレッド１の所属するプロセスＡのスレッドの中で、スレッド１より優先度の低いスレッドを特定する。ここでは、いずれのスレッドも特定されないため、ＯＳ２３０がスレッド１の処理を実行する。ＯＳ２３０が、（２）スレッド１から共通変数Ａへの書き込み要求を検出すると、（３）共有メモリ２０１内の共通変数Ａの領域へスレッド１の共通変数Ａの値を格納する。
【００７２】
図１９は、スレッド１の処理終了後にスレッド２がディスパッチされる例を示す説明図である。図１９では、スレッド１の処理終了フラグがセットされているため、スレッド１の処理が終了している。ＯＳ２３１が、（１）スレッド２のディスパッチを検出する。そして、ＯＳ２３１がスレッド２の所属するプロセスＡの共通変数Ａを含むスレッド群の中で、スレッド２よりも優先度の低いスレッドをスレッドリスト４００に基づいて特定する。
【００７３】
具体的には、たとえば、ＯＳ２３１がスレッドリスト４００からスレッド２の優先度を検索する。ここでは、スレッド２の優先度は２である。つぎに、ＯＳ２３１が、スレッドリスト４００からプロセスＩＤの項目４０１がプロセスＡの識別情報であるスレッドの識別情報のうち、優先度が２よりも小さい値であるスレッドの識別情報を特定する。ここでは、スレッド１の優先度が１であるため、スレッド１が特定される。
【００７４】
そして、ＯＳ２３１が、（２）スレッド１の処理終了フラグがセットされているか否かをチェックする。スレッド１の処理終了フラグがセットされているため、ＯＳ２３１がスレッドリスト４００からスレッド１の出力領域を特定し、ＯＳ２３１がスレッド１の共通変数Ａの値がスレッド１の出力領域に格納されているか否かをスレッド１の出力領域に設定された共通変数Ａの書き込みフラグに基づいて判断する。ここでは、共通変数Ａの値はスレッド１の出力領域に格納されていないと判断され、ＯＳ２３１がスレッド１の共通変数Ａの値が共有メモリ２０１の共通変数Ａの領域に格納済であると判断する。つぎに、ＯＳ２３１が、（３）スレッド２から共通変数Ａへの書き込み要求を検出する。そして、ＯＳ２３１が、（４）スレッド２の共通変数Ａの値を共有メモリ２０１の共通変数Ａの領域に格納する。
【００７５】
また、スレッド２の処理とスレッド３の処理が終了すると、書き込みスレッドによって、スレッド３の出力領域に格納されたスレッド３の共通変数Ａの値が共有メモリ２０１の共通変数Ａの領域に格納される。
【００７６】
（情報処理手順）
図２０は、ＯＳ２３０による情報処理手順を示すフローチャートである。まず、マスタＯＳであるＯＳ２３０が、各プロセスの逐次処理フラグを各ＣＰＵの分散キャッシュ上に設定し（ステップＳ２００１）、実行待ちキューからスレッドを検出したか否かを判断する（ステップＳ２００２）。ＯＳ２３０が、実行待ちキューからスレッドを検出していないと判断した場合（ステップＳ２００２：Ｎｏ）、ステップＳ２００２へ戻る。
【００７７】
ＯＳ２３０が、実行待ちキューからスレッドを検出したと判断した場合（ステップＳ２００２：Ｙｅｓ）、検出したスレッドがスレッドリスト内に含まれているか否かを判断する（ステップＳ２００３）。ＯＳ２３０が、検出したスレッドがスレッドリスト内に含まれていないと判断した場合（ステップＳ２００３：Ｎｏ）、ステップＳ２０１０へ移行する。
【００７８】
ＯＳ２３０が、検出したスレッドがスレッドリスト内に含まれていると判断した場合（ステップＳ２００３：Ｙｅｓ）、検出したスレッドが所属するプロセスの逐次処理フラグがセットされているか否かを判断する（ステップＳ２００４）。ＯＳ２３０が、検出したスレッドが所属するプロセスの逐次処理フラグがセットされていないと判断した場合（ステップＳ２００４：Ｎｏ）、ステップＳ２０１０へ移行する。
【００７９】
ＯＳ２３０が、検出したスレッドが所属するプロセスの逐次処理フラグがセットされていると判断した場合（ステップＳ２００４：Ｙｅｓ）、いずれかのＣＰＵで書き込みスレッドを実行中であるか否かを判断する（ステップＳ２００５）。ＯＳ２３０が、いずれかのＣＰＵで書き込みスレッドを実行中であると判断した場合（ステップＳ２００５：Ｙｅｓ）、ステップＳ２００７へ移行する。
【００８０】
ＯＳ２３０が、いずれのＣＰＵでも書き込みスレッドを実行中でないと判断した場合（ステップＳ２００５：Ｎｏ）、書き込みスレッドを任意のＣＰＵに割り当て（ステップＳ２００６）、検出したスレッドの出力領域を設定済であるか否かを判断する（ステップＳ２００７）。ＯＳ２３０が、検出したスレッドの出力領域を設定済であると判断した場合（ステップＳ２００７：Ｙｅｓ）、ステップＳ２０１０へ移行する。
【００８１】
ＯＳ２３０が、検出したスレッドの出力領域を設定済でないと判断した場合（ステップＳ２００７：Ｎｏ）、検出したスレッドの出力領域を共有キャッシュ上に設定する（ステップＳ２００８）。つぎに、ＯＳ２３０が、検出したスレッドの処理終了フラグの領域を各ＣＰＵの分散キャッシュ上に設定し（ステップＳ２００９）、検出したスレッドを任意のＣＰＵに割り当て（ステップＳ２０１０）、ステップＳ２００２へ戻る。
【００８２】
図２１および図２２は、各ＯＳによる情報処理手順を示すフローチャートである。図２１および図２２では情報処理手順は各ＯＳがそれぞれで実行する情報処理の手順を示している。まず、ＯＳが、ディスパッチまたはすべてのスレッドの処理終了を検出したか否かを判断する（ステップＳ２１０１）。ＯＳが、ディスパッチおよびすべてのスレッドの処理終了を検出していないと判断した場合（ステップＳ２１０１：Ｎｏ）、ステップＳ２１０１へ戻る。
【００８３】
ＯＳが、ディスパッチを検出したと判断した場合（ステップＳ２１０１：ディスパッチ）、ディスパッチされたスレッドがスレッドリスト内に含まれるスレッドであるか否かを判断する（ステップＳ２１０２）。ＯＳが、ディスパッチされたスレッドがスレッドリスト内に含まれるスレッドでないと判断した場合（ステップＳ２１０２：Ｎｏ）、ステップＳ２１０１へ戻る。
【００８４】
ＯＳが、ディスパッチされたスレッドがスレッドリスト内に含まれるスレッドであると判断した場合（ステップＳ２１０２：Ｙｅｓ）、ディスパッチされたスレッドが所属するプロセスの逐次処理フラグがセットされているか否かを判断する（ステップＳ２１０３）。ＯＳが、ディスパッチされたスレッドが所属するプロセスの逐次処理フラグがセットされていないと判断した場合（ステップＳ２１０３：Ｎｏ）、ステップＳ２１０９へ移行する。
【００８５】
ＯＳが、ディスパッチされたスレッドが所属するプロセスの逐次処理フラグがセットされたと判断した場合（ステップＳ２１０３：Ｙｅｓ）、共通変数の書き込み要求、ディスパッチ、またはスレッドの終了を検出したか否かを判断する（ステップＳ２１０４）。ＯＳが、共通変数の書き込み要求、ディスパッチ、およびスレッドの終了を検出していないと判断した場合（ステップＳ２１０４：Ｎｏ）、ステップＳ２１０４へ戻る。
【００８６】
ＯＳが、ディスパッチを検出したと判断した場合（ステップＳ２１０４：ディスパッチ）、ステップＳ２１０２へ戻る。ＯＳが、スレッドの終了を検出したと判断した場合（ステップＳ２１０４：スレッドの終了）、終了を検出したスレッドに対応する処理終了フラグを処理終了値にセットし（ステップＳ２１０５）、ステップＳ２１０１へ戻る。
【００８７】
ＯＳが、共通変数の書き込み要求を検出したと判断した場合（ステップＳ２１０４：共通変数の書き込み要求）、書き込み要求を検出したスレッドに対応する共有キャッシュ上の出力領域に格納可能か否かを判断する（ステップＳ２１０６）。ＯＳが、書き込み要求を検出したスレッドに対応する共有キャッシュ上の出力領域に格納可能であると判断した場合（ステップＳ２１０６：可能）、スレッドに対応する出力領域に共通変数の値を格納する（ステップＳ２１０７）。
【００８８】
ＯＳが、書き込み要求を検出したスレッドに対応する共有キャッシュ上の出力領域に格納不可能であると判断した場合（ステップＳ２１０６：不可能）、逐次処理フラグをセットする（ステップＳ２１０８）。つぎに、ＯＳが、ディスパッチされたスレッドの所属するプロセスのスレッドの中で、ディスパッチされたスレッドより優先度の低いスレッドを特定する（ステップＳ２１０９）。
【００８９】
ＯＳが、優先度の低いスレッドを特定したか否かを判断する（ステップＳ２１１０）。ＯＳが、優先度の低いスレッドを特定していないと判断した場合（ステップＳ２１１０：Ｎｏ）、ステップＳ２１１９へ移行する。ＯＳが、優先度の低いスレッドを特定したと判断した場合（ステップＳ２１１０：Ｙｅｓ）、特定したすべてのスレッドの処理終了フラグが処理終了値であるか否かを判断する（ステップＳ２１１１）。
【００９０】
ＯＳが、特定したすべてのスレッドの処理終了フラグが処理終了値でないと判断した場合（ステップＳ２１１１：Ｎｏ）、レディーキューから他のスレッドをディスパッチし（ステップＳ２１１２）、ステップＳ２１０１へ戻る。ＯＳが、特定したすべてのスレッドの処理終了フラグが処理終了値であると判断した場合（ステップＳ２１１１：Ｙｅｓ）、特定したスレッドのうち、未選択のスレッドがあるか否かを判断する（ステップＳ２１１３）。
【００９１】
ＯＳが、未選択のスレッドがあると判断した場合（ステップＳ２１１３：Ｙｅｓ）、未選択のスレッドのうち、優先度の最も低いスレッドを選択する（ステップＳ２１１４）。そして、ＯＳが、選択したスレッドに対応する出力領域が共有キャッシュ上に存在するか否かを判断する（ステップＳ２１１５）。
【００９２】
ＯＳが、選択したスレッドに対応する出力領域が共有キャッシュ上に存在しないと判断した場合（ステップＳ２１１５：Ｎｏ）、ステップＳ２１１３へ戻る。ＯＳが、選択したスレッドに対応する出力領域が共有キャッシュ上に存在すると判断した場合（ステップＳ２１１５：Ｙｅｓ）、選択したスレッドに対応する出力領域に格納された共通変数の値を共有メモリの該共通変数の領域へ格納する（ステップＳ２１１６）。
【００９３】
ＯＳが、選択したスレッドに対応する出力領域を解放し（ステップＳ２１１７）、スレッドリスト内の選択したスレッドに関する出力領域の情報を削除し（ステップＳ２１１８）、ステップＳ２１１３へ戻る。
【００９４】
ステップＳ２１１３において、ＯＳが、未選択のスレッドがないと判断した場合（ステップＳ２１１３：Ｎｏ）、ディスパッチされたスレッドの処理を実行する（ステップＳ２１１９）。そして、ＯＳが、ディスパッチされたスレッドの処理終了、またはディスパッチを検出したか否かを判断する（ステップＳ２１２０）。
【００９５】
ＯＳが、ディスパッチされたスレッドの処理終了、およびディスパッチを検出していないと判断した場合（ステップＳ２１２０：Ｎｏ）、ステップＳ２１２０へ戻る。ＯＳが、ディスパッチを検出したと判断した場合（ステップＳ２１２０：ディスパッチ）、ステップＳ２１０２へ戻る。ＯＳが、ディスパッチされたスレッドの処理終了を検出したと判断した場合（ステップＳ２１２０：スレッドの処理終了）、ディスパッチされたスレッドに対応する処理終了フラグを書き込み完了値に設定し（ステップＳ２１２１）、ステップＳ２１０１へ戻る。
【００９６】
ステップＳ２１０１において、ＯＳが、すべてのスレッドの処理終了を検出したと判断した場合（ステップＳ２１０１：処理終了）、一連の処理を終了する。
【００９７】
図２３および図２４は、書き込みスレッドによる情報処理手順を示すフローチャートである。書き込みスレッドが、スレッドリスト中のプロセスの中で、逐次処理フラグがセットされているプロセスがあるか否かを判断する（ステップＳ２３０１）。書き込みスレッドが、スレッドリスト中のプロセスの中で、逐次処理フラグがセットされているプロセスがあると判断した場合（ステップＳ２３０１：Ｙｅｓ）、逐次処理フラグがセットされているプロセスの中で、未選択なプロセスがあるか否かを判断する（ステップＳ２３０２）。
【００９８】
書き込みスレッドが、未選択なプロセスがあると判断した場合（ステップＳ２３０２：Ｙｅｓ）、逐次処理フラグがセットされているプロセスの中で、未選択なプロセスから任意のプロセスを選択する（ステップＳ２３０３）。そして、書き込みスレッドが、選択したプロセスの共通変数を含むスレッド群のうち、未選択なスレッドがあるか否かを判断する（ステップＳ２３０４）。書き込みスレッドが、未選択なスレッドがないと判断した場合（ステップＳ２３０４：Ｎｏ）、ステップＳ２３０２へ戻る。
【００９９】
書き込みスレッドが、未選択なスレッドがあると判断した場合（ステップＳ２３０４：Ｙｅｓ）、未選択なスレッドのうち、優先度の最も低いスレッドを選択する（ステップＳ２３０５）。そして、書き込みスレッドが、選択したスレッドの処理終了フラグが処理終了値であるか否かを判断する（ステップＳ２３０６）。
【０１００】
書き込みスレッドが、選択したスレッドの処理終了フラグが処理終了値でないと判断した場合（ステップＳ２３０６：Ｎｏ）、ステップＳ２３０２へ戻る。書き込みスレッドが、選択したスレッドの処理終了フラグが処理終了値であると判断した場合（ステップＳ２３０６：Ｙｅｓ）、選択したスレッドに対応する出力領域に格納された共通変数の値を共有メモリの該共通変数の領域へ格納する（ステップＳ２３０７）。
【０１０１】
つぎに、書き込みスレッドが、選択したスレッドに対応する出力領域を解放し（ステップＳ２３０８）、スレッドリスト内の選択したスレッドに関する出力領域の情報を削除し（ステップＳ２３０９）、ステップＳ２３０４へ戻る。
【０１０２】
ステップＳ２３０２において、書き込みスレッドが、逐次処理フラグがセットされているプロセスの中で、未選択なプロセスがないと判断した場合（ステップＳ２３０２：Ｎｏ）、ステップＳ２３１７へ移行する。
【０１０３】
ステップＳ２３０１において、書き込みスレッドが、逐次処理フラグがセットされているプロセスがないと判断した場合（ステップＳ２３０１：Ｎｏ）、スレッドリスト内のプロセスの中で、共通変数を含むスレッド群のすべてのスレッドの処理終了フラグが処理終了値にセットされているプロセスがあるか否かを判断する（ステップＳ２３１０）。書き込みスレッドが、すべてのスレッドの処理終了フラグが処理終了値にセットされているプロセスがないと判断した場合（ステップＳ２３１０：Ｎｏ）、ステップＳ２３０１へ戻る。
【０１０４】
書き込みスレッドが、すべてのスレッドの処理終了フラグが処理終了値にセットされているプロセスがあると判断した場合（ステップＳ２３１０：Ｙｅｓ）、すべてのスレッドの処理終了フラグが処理終了値であるプロセスの中で、未選択なプロセスがあるか否かを判断する（ステップＳ２３１１）。書き込みスレッドが、未選択なプロセスがあると判断した場合（ステップＳ２３１１：Ｙｅｓ）、未選択なプロセスから任意のプロセスを選択する（ステップＳ２３１２）。
【０１０５】
つぎに、書き込みスレッドが、選択したプロセスの共通変数を含むスレッド群の各スレッドに対応する出力領域を開放し（ステップＳ２３１３）、スレッドリスト内の選択したプロセスの共通変数を含むスレッド群の各スレッドに関する出力領域の情報を削除する（ステップＳ２３１４）。
【０１０６】
そして、書き込みスレッドが、選択したプロセスの逐次処理フラグをリセットし（ステップＳ２３１５）、選択したプロセスの共通変数を含むスレッド群の各スレッドの処理終了フラグを各分散キャッシュから解放し（ステップＳ２３１６）、ステップＳ２３１１へ戻る。書き込みスレッドが、未選択なプロセスがないと判断した場合（ステップＳ２３１１：Ｎｏ）、スレッドリスト中のすべてのプロセスのスレッドがすべて終了したか否かを判断する（ステップＳ２３１７）。
【０１０７】
書き込みスレッドが、スレッドリスト中のすべてのプロセスのスレッドがすべて終了していないと判断した場合（ステップＳ２３１７：Ｎｏ）、ステップＳ２３０１へ戻る。書き込みスレッドが、スレッドリスト中のすべてのプロセスのスレッドがすべて終了したと判断した場合（ステップＳ２３１７：Ｙｅｓ）、一連の処理を終了する。
【０１０８】
以上説明したように、情報処理装置、情報処理プログラム、および情報処理方法によれば、対象プロセスで共通変数を有するスレッド群の各スレッドの共通変数の値をそれぞれ異なる領域に格納する。そして、該スレッド群のすべてのスレッドが終了後に対象プロセスで定義されたスレッド群の順に特定の格納先に上書きする。スレッド群の実行順序と定義されたスレッド群の実行順序とが異なっていても、最終的な共通変数の値が異なるのを防止することができ、スループットおよび実行効率を向上させることができる。
【０１０９】
また、該スレッド群の一のスレッドの共通変数の値を格納する格納先が設定できない場合、一のスレッドよりも実行順が早いスレッドの実行が終了していれば、一のスレッドの共通変数の値を特定の格納先に格納する。これにより、実行順に特定の格納先へ共通変数の値を格納することができる。
【０１１０】
また、該スレッド群の一のスレッドの共通変数の値を格納する格納先が設定できない場合、一のスレッドよりも実行順が早いスレッドの実行が終了していなければ、一のスレッドの共通変数の値を特定の格納先に格納しない。そして、一のスレッドから他のスレッドに実行を切り替える。これにより、実行順が異なる状態で、特定の格納先へ共通変数の値が格納されるのを防止することができる。
【符号の説明】
【０１１１】
２００  情報処理装置
５０１  設定部
５０２  第１の格納部
５０３  第２の格納部
５０４  切り替え部
【図１】
2012046301.tif 000003
【図２】
2012046301.tif 000004
【図３】
2012046301.tif 000005
【図４】
2012046301.tif 000006
【図５】
2012046301.tif 000007
【図６】
2012046301.tif 000008
【図７】
2012046301.tif 000009
【図８】
2012046301.tif 000010
【図９】
2012046301.tif 000011
【図１０】
2012046301.tif 000012
【図１１】
2012046301.tif 000013
【図１２】
2012046301.tif 000014
【図１３】
2012046301.tif 000015
【図１４】
2012046301.tif 000016
【図１５】
2012046301.tif 000017
【図１６】
2012046301.tif 000018
【図１７】
2012046301.tif 000019
【図１８】
2012046301.tif 000020
【図１９】
2012046301.tif 000021
【図２０】
2012046301.tif 000022
【図２１】
2012046301.tif 000023
【図２２】
2012046301.tif 000024
【図２３】
2012046301.tif 000025
【図２４】
2012046301.tif 000026
【国際調査報告】
2012046301.tif 000027
2012046301.tif 000028
2012046301.tif 000029
2012046301.tif 000030