(57)【要約】  同期処理を行う際のユーザへの応答性を向上する。ＣＰＵ（＃０）は、検出部（３０４）によって同期処理を複数回行うスレッド（Ａ）、スレッド（Ｂ）のうち、スレッド（Ａ）が同期処理を実行する処理コードの位置となる同期ポイントに到着したことを検出する。スレッド（Ａ）が到着したことが検出された場合、ＣＰＵ（＃０）は、判定部（３０５）によって、記憶部（３０３）に記憶された同期処理の種別に基づいて、スレッド（Ａ）の同期処理の種別を判定する。スレッド（Ａ）の同期処理の種別が第１の種別であると判定された場合、ＣＰＵ（＃０）は、制御部（３０６）によって、同期ポイントに到着していないスレッド（Ｂ）の処理履歴に基づいて、スレッド（Ａ）に同期処理を実行させる。
2012086041.tif 000002
【特許請求の範囲】
【請求項１】
第２スレッドと同期処理を行う第１スレッドの同期処理の種別を判定し、
前記第１スレッドの同期処理の種別が第１の種別であるとき時間計測を開始し、
計測時間が前記第１スレッドの応答許容時間を超えるときは前記第２スレッドの同期処理履歴に基づいて前記第１スレッドと前記第２スレッドとの同期処理を行い、
他の処理要求があるときは前記応答許容時間を更新して前記第２スレッドの同期処理履歴に基づいて前記第１スレッドと前記第２スレッドとの同期処理を行うこと
を特徴とするコンピュータによって実行されるマルチスレッドの同期処理方法。
【請求項２】
前記応答許容時間経過前に、前記第２スレッドが同期処理を行う状態にあるときは、前記第１スレッドと前記第２スレッドとの同期処理を行うこと
を特徴とする請求項１に記載の同期処理方法。
【請求項３】
前記第２スレッドの同期処理履歴に基づいて前記第１スレッドと前記第２スレッドとの同期処理が行われた後に、前記第１スレッドの同期状態フラグを設定すること
を特徴とする請求項１または請求項２に記載の同期処理方法。
【請求項４】
前記第１スレッドと前記第２スレッドとの同期処理が行われた後に、前記第１スレッドおよび前記第２スレッドの同期状態フラグを初期状態に設定すること
を特徴とする請求項２に記載の同期処理方法。
【請求項５】
前記第１スレッドの同期処理の種別が第２の種別であるとき前記第２スレッドの同期処理の種別を判定すること
を特徴とする請求項１乃至請求項４の何れか一に記載の同期処理方法。
【請求項６】
前記第２スレッドの同期処理の種別が前記第１の種別であって前記第２スレッドの同期状態フラグが設定されているとき、前記第１スレッドと前記第２スレッドとの同期処理を省略すること
を特徴とする請求項５に記載の同期処理方法。
【請求項７】
前記第２スレッドの同期処理の種別が前記第２の種別であるとき、前記第１スレッドと前記第２スレッドとの同期処理を行うこと
を特徴とする請求項５に記載の同期処理方法。
【請求項８】
前記第１スレッドと前記第２スレッドの同期状態フラグを初期状態に設定すること
を特徴とする請求項６に記載の同期処理方法。
【請求項９】
前記第１スレッドおよび前記第２スレッドの同期処理履歴に前記同期処理に到着した際の処理結果を記録すること
を特徴とする請求項７に記載の同期処理方法。
【請求項１０】
前記他の処理要求は、外部入力数が所定値を超えるときに検出されること
を特徴とする請求項１乃至請求項９の何れか一に記載の同期処理方法。
【請求項１１】
第２スレッドと同期処理を行う第１スレッドの同期処理の種別が第１の種別であるか第２の種別であるかを判定し、
前記第１スレッドの同期処理の種別が第２の種別であるとき前記第２スレッドの同期処理の種別を判定し、
前記第２スレッドの同期処理の種別が前記第１の種別であって前記第２スレッドの同期状態フラグが設定されているとき、前記第１スレッドと前記第２スレッドとの同期処理を省略し、
前記第２スレッドの同期処理の種別が前記第２の種別であるとき、前記第１スレッドと前記第２スレッドとの同期処理を行うこと
を特徴とする同期処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッド間の同期処理方法に関する。
【背景技術】
【０００２】
従来から、１つのＣＰＵに対して、複数のプログラムを動作させるマルチプログラミング技術が存在する。具体的には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の処理時間を分割する機能を有し、分割された時間にスレッドを割り当てることにより、ＣＰＵが同時に複数のスレッドを動作することができる。ここで、スレッドはプログラムの実行単位である。また、コンピュータシステムに複数のＣＰＵを搭載するマルチコアプロセッサシステムの技術も開示されている。これにより、前述のマルチプログラミング技術において、ＯＳは複数のスレッドを複数のＣＰＵに対して割り当てることができる。【０００３】
また、１つのＣＰＵ、または複数のＣＰＵが複数のスレッドを並列して実行する場合、スレッド間の共有データを保護するために、同期処理が行われる。同期処理が行われる例として、たとえば、複数のＣＰＵが同時にメモリアクセスを行う場合、または、スレッドを各ＣＰＵに分散して割り付けた後、各ＣＰＵからの結果を収集する場合である。【０００４】
同期処理に関する技術として、たとえば、並列実行部分の実行に要した時間を統計的に記録しておき、これから実行する処理部分が統計的な時間よりも長い可能性が高い場合、同期処理を失敗とみなして次の処理を割り当てる技術が開示されている。これにより、処理を実行していないＣＰＵを減らすことができる。また、別の同期処理に関する技術として、たとえば、情報別の同期レベルと、同期レベルに対応する同期時刻間隔を記憶し、同期処理を行う負荷を減らす技術が開示されている（たとえば、下記特許文献１、２を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２４０５４９号公報
【特許文献２】特開２００４−５０９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、たとえば、特定の処理コードの位置で同期処理を行う２つのスレッドがあり、片方のスレッドが時間のかかる処理であった場合を想定する。このとき、特許文献１、２にかかる技術では、並列処理が失敗したとみなされてスレッドが終了してしまうという問題があった。また、もう一方のスレッドが、時間のかかるスレッドを待ち続けた場合、待ち続けるスレッドによってはユーザへの応答性が低下してしまうという問題があった。【０００７】
本発明は、上述した従来技術による問題点を解消するため、ユーザへの応答性を向上できる同期処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、開示の同期処理方法は、第２スレッドと同期処理を行う第１スレッドの同期処理の種別を判定し、第１スレッドの同期処理の種別が第１の種別であるとき時間計測を開始し、計測時間が第１スレッドの応答許容時間を超えるときは第２スレッドの同期処理履歴に基づいて第１スレッドと第２スレッドとの同期処理を行い、他の処理要求があるときは応答許容時間を更新して第２スレッドの同期処理履歴に基づいて第１スレッドと第２スレッドとの同期処理を行う。
【発明の効果】
【０００９】
本同期処理方法によれば、同期処理後のユーザ応答を行う処理の実行開始が早まり、ユーザへの応答性を向上できるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、マルチコアプロセッサシステム１００におけるスレッドＡ〜スレッドＣの動作を示す説明図である。
【図２】図２は、実施の形態にかかるマルチコアプロセッサシステム１００のハードウェアを示すブロック図である。
【図３】図３は、マルチコアプロセッサシステム１００の機能を示すブロック図である。
【図４】図４は、スレッド属性テーブル３０１とスレッド同期履歴テーブル３０２の記憶内容の一例を示す説明図である。
【図５】図５は、スレッドＡ〜スレッドＤが実行開始した状態を示す説明図である。
【図６】図６は、スレッドＡが同期ポイントに到着した状態を示す説明図である。
【図７】図７は、スレッドＣが応答許容時間内に同期ポイントに到着した状態を示す説明図である。
【図８】図８は、スレッドＢが同期ポイントに到着した状態を示す説明図である。
【図９】図９は、スレッドＤが同期ポイントに到着する前に応答許容時間が経過した状態を示す説明図である。
【図１０】図１０は、スレッドＤが応答許容時間経過後に同期ポイントに到着した状態を示す説明図である。
【図１１】図１１は、複数のユーザが存在する場合の適用例を示した説明図である。
【図１２】図１２は、同期チェッカ５０２の処理を示すフローチャート（その１）である。
【図１３】図１３は、同期チェッカ５０２の処理を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示の同期処理方法の好適な実施の形態を詳細に説明する。なお、本実施の形態にかかる同期処理方法を実行する情報処理装置の例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。また、同期処理方法を実行する情報処理装置は、コアが単一であるシングルコアであってもよい。
【００１２】
図１は、マルチコアプロセッサシステム１００におけるスレッドＡ〜スレッドＣの動作を示す説明図である。図１では、複数のＣＰＵを有するマルチコアプロセッサシステム１００が、Ｗｅｂブラウザを実行している状態を想定している。マルチコアプロセッサシステム１００は、携帯電話といった携帯端末を想定している。Ｗｅｂブラウザは３つのスレッドを含んでおり、それぞれスレッドＡ、スレッドＢ、スレッドＣとする。また、符号１０１で示す図は、従来例にかかるマルチコアプロセッサシステム１００でのスレッドＡ〜スレッドＣの動作を示す説明図である。符号１０２で示す図は、本実施の形態にかかるマルチコアプロセッサシステム１００でのスレッドＡ〜スレッドＣの動作を示す説明図である。
【００１３】
また、マルチコアプロセッサシステム１００は、ハードウェアとして、ユーザに文字や画像を表示するディスプレイ１０３、ユーザからの入力を受け付けるキーボード１０４が含まれる。ディスプレイ１０３、キーボード１０４の詳細については図２にて後述する。また、スレッドＡ〜スレッドＣの詳細について、スレッドＡは、ユーザからのテキスト入力を受け付けるスレッドである。スレッドＢは画像を表示するスレッドである。スレッドＣは、テキストを表示するスレッドである。
【００１４】
続けて、符号１０１で示す図を用いてスレッドＡ〜スレッドＣの動作を説明する。ＷｅｂブラウザはＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）データを受信した後、ＨＴＭＬデータを解析する。解析の結果、Ｗｅｂブラウザは、ＨＴＭＬデータ内にテキスト入力フィールドと、画像表示部分とテキスト表示部分があると判断し、スレッドＡ〜スレッドＣを時刻ｔ０にて起動する。起動されたスレッドＡ〜スレッドＣは、レンダリング処理を実行する。
【００１５】
レンダリング処理は、ディスプレイ１０３に表示する画像を生成する処理である。たとえば、スレッドＡは、レンダリング処理によってテキスト入力枠の画像を生成する。スレッドＢは、ＨＴＭＬデータ内のリンクによって取得した圧縮された画像データから、画像フォーマットに従って伸長された画像を生成する。スレッドＣは、ＨＴＭＬデータ内のテキスト文字列の画像を生成する。
【００１６】
Ｗｅｂブラウザは、スレッドＡ〜スレッドＣに、レンダリング処理の終了後に同期処理を実行するように指示する。具体的には、Ｗｅｂブラウザの開発者等が、レンダリング処理の終了時のコードに同期処理を挿入しておく。同期処理が挿入されたコード位置を同期ポイントと定義する。また、同期処理は、特定のグループに含まれるスレッドが全て同期ポイントに到着した際に、次の処理に進む機能を有する。この特定のグループのことを、同期グループと定義する。実行時、スレッドＡ〜スレッドＣは、同一の同期グループに属するスレッドＡ〜スレッドＣ全てが同期ポイントに到着した場合に、次の処理に移行するようになる。
【００１７】
これにより、Ｗｅｂブラウザは、スレッドＡ〜スレッドＣのレンダリング処理が全て終了し、表示可能となった時刻ｔ３にて、ディスプレイ１０３にＷｅｂページを表示する。符号１０１の例では、時刻ｔ１にてスレッドＡのレンダリング処理が終了し、時刻ｔ２にてスレッドＢのレンダリング処理が終了し、時刻ｔ３にてスレッドＣのレンダリング処理が終了することを想定する。Ｗｅｂページの表示後、スレッドＡは、ユーザからの入力受付処理を行う。入力受付処理は、たとえば、カーソルを点滅させて入力可能であることを示しつつ、ユーザによってキーボード１０４が操作され文字列が入力された場合に、入力された文字列を表示する処理を行う。
【００１８】
このように、従来例にかかるマルチコアプロセッサシステム１００では、スレッドＡ〜スレッドＣのレンダリング処理が全て終了してからＷｅｂページの表示を行っていた。もし、スレッドＢ、スレッドＣのレンダリング処理に時間がかかった場合、ユーザはＷｅｂページの表示を待ち続ける状態になってしまっていた。たとえば、マルチコアプロセッサシステム１００が過去に該当のＷｅｂページを開いたことがあった場合を想定する。ユーザがもしテキスト入力のためにＷｅｂページを閲覧したくても、Ｗｅｂページが表示されないためテキスト入力が行えず、ユーザが待たされてしまう状態となっていた。
【００１９】
次に、符号１０２で示す図を用いて本実施の形態にかかるマルチコアプロセッサシステム１００でのスレッドＡ〜スレッドＣの動作を説明する。スレッドＡ〜スレッドＣは、時刻ｔ０にてレンダリング処理を開始し、時刻ｔ１にてスレッドＡのレンダリング処理が終了し、時刻ｔ２にてスレッドＢのレンダリング処理が終了し、時刻ｔ３にてスレッドＣのレンダリング処理が終了する。ここで、時刻ｔ１〜時刻ｔ３間となる時刻ｔ４にて、ユーザがキーボード１０４を頻繁に操作した場合を想定する。このとき、マルチコアプロセッサシステム１００は、キーボード１０４からの入力を検出し、スレッドＢのレンダリング結果、スレッドＣの過去のレンダリング結果を用いてＷｅｂページを表示する。表示後、スレッドＡは、入力受付処理を実行する。
【００２０】
このように、本実施の形態にかかるマルチコアプロセッサシステム１００では、ユーザ応答を行うスレッドを先行実行することで、ユーザへの応答性を向上することができる。符号１０２の例では、スレッドＣのレンダリング処理が終了する前に、ユーザは、スレッドＡの入力受付処理によってテキスト入力が行えるようになり、応答性が向上することになる。
【００２１】
また、スレッドＡ〜スレッドＣの同期処理は、同期処理を行わなくても、重大な問題が発生しない。具体的に、時刻ｔ４では、スレッドＣの過去のレンダリング結果を用いているため、時刻ｔ３以降で取得可能となるスレッドＣのレンダリング処理結果と、過去のレンダリング処理結果が異なる場合がある。しかし、ユーザはテキスト入力処理を目的としているため、過去の結果と現在の結果が異なっていても重大な問題が生じない。また、Ｗｅｂブラウザは、時刻ｔ３にてスレッドＣのレンダリング処理の終了後、レンダリング結果を過去のレンダリング処理結果と差し替えてディスプレイ１０３に表示してもよい。
【００２２】
このように、本実施の形態にかかるマルチコアプロセッサシステム１００では、同期処理を行わなくても重大な問題が発生しない処理に対し、先行してユーザに対する処理を行うことで、ユーザに対する応答性を向上させる。
【００２３】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、実施の形態にかかるマルチコアプロセッサシステム１００のハードウェアを示すブロック図である。図２において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０３と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０７と、キーボード１０４と、を含む。また、各部はバス２０８によってそれぞれ接続されている。
【００２４】
ここで、ＣＰＵｓ２０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ２０１は、シングルコアのプロセッサを並列して接続した全てのＣＰＵを指している。ＣＰＵｓ２０１内の各ＣＰＵは、それぞれ専用のキャッシュメモリを有してもよい。ＣＰＵｓ２０１内には、ＣＰＵ＃０〜ＣＰＵ＃Ｎが含まれる。Ｎは０以上の整数である。なお、本実施の形態では、単一のＣＰＵを有するシングルコアプロセッサであってもよい。本同期処理方法を実行する装置がシングルコアプロセッサである場合、ＯＳ等の機能により、マルチプログラミングが可能であると想定する。
【００２５】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵｓ２０１のワークエリアとして使用される。フラッシュＲＯＭ２０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ２０７によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２６】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵｓ２０１の制御に従ってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ２０７を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。また、フラッシュＲＯＭ２０６は、本同期処理方法を実行するプログラムを格納していてもよい。
【００２７】
ディスプレイ１０３は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ１０３は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２８】
Ｉ／Ｆ２０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２０９に接続され、ネットワーク２０９を介して他の装置に接続される。そして、Ｉ／Ｆ２０７は、ネットワーク２０９と内部のインターフェイスを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０７には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２９】
キーボード１０４は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード１０４は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３０】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図３は、マルチコアプロセッサシステム１００の機能を示すブロック図である。マルチコアプロセッサシステム１００は、記憶部３０３と、検出部３０４と、判定部３０５と、制御部３０６と、を含む。この制御部となる機能（検出部３０４〜制御部３０６）は、記憶装置に記憶されたプログラムをＣＰＵ＃０が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などである。または、Ｉ／Ｆ２０７を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００３１】
また、図３では、検出部３０４〜制御部３０６がＣＰＵ＃０の機能であるように図示されているが、ＣＰＵ＃０以外となるＣＰＵ＃１〜ＣＰＵ＃Ｎも検出部３０４〜制御部３０６を有してもよい。また、図３に示すスレッドＡはＣＰＵ＃０に割り当てられたスレッドであり、スレッドＢはＣＰＵ＃１に割り当てられたスレッドである。スレッドＡとスレッドＢは、同一の同期グループに属しており、同期処理を行う。また、図３では、記憶部３０３がＲＡＭ２０３の機能であるように図示されているが、記憶部３０３は、他の記憶装置であるフラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６の機能であってもよい。
【００３２】
記憶部３０３は、複数のスレッドの各々のスレッドの同期処理の種別を記憶する機能を有する。種別としては、複数のスレッドが同期ポイントに到着する前にスレッドを実行可能とする第１の種別か、複数のスレッドが同期ポイントに到着するまでスレッドを待機させる第２の種別かである。具体的には、記憶部３０３は、各々のスレッドの同期処理の種別をスレッド属性テーブル３０１に格納している。
【００３３】
また、記憶部３０３は、スレッドが同期処理を実行した際の処理履歴を記憶している。具体的には、記憶部３０３は、スレッドが同期処理を実行した際の処理結果を処理履歴としてスレッド同期履歴テーブル３０２に格納している。なお、スレッド属性テーブル３０１とスレッド同期履歴テーブル３０２の記憶内容の詳細については、図４にて後述する。
【００３４】
検出部３０４は、同期処理を複数回行う複数のスレッドのうち、特定のスレッドが同期処理を実行する処理コードの位置となる同期ポイントに到着したことを検出する機能を有する。なお、具体的にスレッドが同期ポイントに到着した状態とは、スレッドのプログラムカウンタが、同期処理を実行する処理コードの先頭を指した状態を示している。たとえば、検出部３０４は、スレッドＡが同期ポイントに到着したことを検出する。なお、検出されたという情報は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３５】
判定部３０５は、検出部３０４によって特定のスレッドが到着したことが検出された場合、記憶部３０３に記憶された同期処理の種別に基づいて、特定のスレッドの同期処理の種別を判定する機能を有する。たとえば、スレッド属性テーブル３０１に、スレッドＡの同期処理の種別が第１の種別であると格納されている場合、判定部３０５は、スレッドＡの同期処理の種別が、第１の種別であると特定する。なお、特定された同期処理の種別は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３６】
また、判定部３０５は、さらに、検出部３０４によって特定のスレッドが到着したことが検出された後、検出された時刻から特定のスレッドに対応する応答許容時間を越えたか否かを判定してもよい。たとえば、スレッドＡの同期処理の種別が第１の種別であり、応答許容時間が１０［秒］である場合を想定する。この場合、判定部３０５は、スレッドＡが同期ポイントに到着した時刻から１０［秒］経過したことを判定する。なお、応答許容時間を越えたか否かという情報は、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶領域に記憶される。
【００３７】
また、判定部３０５は、さらに、対象スレッドの処理要求以外となる他の処理要求が行われたかを判定してもよい。たとえば、判定部３０５は、キーボード１０４からの単位時間当たりの入力数が所定値を越えた場合に、対象スレッドの処理要求以外であるユーザからの処理要求が行われたとして判定してもよい。また、図２では表示していないが、マルチコアプロセッサシステム１００がキーボード１０４以外の入力インターフェイスを有する場合、判定部３０５は、入力インターフェイスからの入力値によって、ユーザからの処理要求が行われたとして判定してもよい。
【００３８】
たとえば、マルチコアプロセッサシステム１００が物体の傾き等を検出可能なジャイロセンサーを有する場合、判定部３０５は、物体の傾きの変化が激しい場合に、ユーザからの処理要求が行われたとして判定してもよい。
【００３９】
また、判定部３０５は、同期処理が行われない状態のまま、ユーザからの処理要求が行われた場合に、ユーザからの処理要求の時刻によって更新された応答許容時間を越えたかを判定してもよい。たとえば、スレッドＡの同期処理の種別が第１の種別であり、応答許容時間が１０［秒］であり、ユーザからの処理要求が、スレッドＡが同期ポイントに到着した時刻から６［秒］後にあったと想定する。このとき、更新された応答許容時間が８［秒］となった場合、判定部３０５は、スレッドＡが同期ポイントに到着した時刻から８［秒］経過したことを判定する。
【００４０】
なお、応答許容時間の更新方法としては、応答許容時間が短くなる方向に更新すればよい。たとえば、マルチコアプロセッサシステム１００は、応答許容時間１０［秒］とユーザからの処理要求の時間６［秒］とを相加平均した時間８［秒］を、新たな応答許容時間として更新する。
【００４１】
制御部３０６は、判定部３０５によって特定のスレッドの同期処理の種別が第１の種別であると判定された場合、複数のスレッドのうち同期ポイントに到着していない他のスレッドの処理履歴に基づいて、特定のスレッドに同期処理を実行させる機能を有する。なお、処理履歴とは、特定のスレッドが到着した時刻以前に他のスレッドが同期処理を実行した際の処理結果である。たとえば、制御部３０６は、他のスレッドとなるスレッドＢの処理履歴に基づいて、同期処理の種別が第１の種別であると判定されたスレッドＡに同期処理を実行させる。
【００４２】
また、制御部３０６は、特定のスレッドの同期処理の種別が第１の種別であり検出された時刻から特定のスレッドに対応する応答許容時間を越えたと判定された場合、他のスレッドの処理履歴に基づいて特定のスレッドに同期処理を実行させてもよい。また、制御部３０６は、応答許容時間が更新された場合、更新された応答許容時間を越えたと判定された場合、他のスレッドの処理履歴に基づいて特定のスレッドに同期処理を実行させてもよい。
【００４３】
図４は、スレッド属性テーブル３０１とスレッド同期履歴テーブル３０２の記憶内容の一例を示す説明図である。スレッド属性テーブル３０１は、スレッド名称、同期処理種別、応答許容時間、同期状態フラグという４つのフィールドを含む。スレッド名称フィールドには、対象となるスレッドの名称、ＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）といった、対象スレッドを一意に特定できる情報が格納される。
【００４４】
同期処理種別フィールドには、同期処理の処理方法の種別が格納される。格納される値は、“速”か“他”かの２種類である。第１の種別となる“速”は、対象スレッドが同期処理を行わなくとも問題の少ないスレッドであり、かつ、ユーザに対する応答性に影響を及ぼすスレッドであることを示している。第２の種別となる“他”は、対象スレッドが“速”以外のスレッドであることを示している。
【００４５】
同期処理を行わなくとも問題の少ないスレッドとしては、たとえば、レンダリング処理の結果を収集するスレッドである。また、ユーザに対する応答性に影響を及ぼすスレッドとしては、たとえば、キーボード１０４からの入力を受け付けるスレッド、または、ディスプレイ１０３に表示するスレッドである。このような条件に当てはまるか否かを、マルチコアプロセッサ１００の設計者等が設計時に、スレッドごとに設定しておく。
【００４６】
応答許容時間フィールドには、ユーザに対する応答処理を実行するまでの許容時間の閾値が格納される。同期処理種別フィールドが“速”である対象スレッドが同期ポイントに到着し、応答許容時間フィールドに設定された時間を越えた場合、対象スレッドと他スレッドの過去の処理履歴とで同期処理を行う。なお、応答許容時間フィールドに設定される値は、アプリケーションプログラムの仕様に基づいた値を設定してもよいし、ユーザの操作履歴に基づいた値を設定してもよい。
【００４７】
同期状態フラグフィールドには、対象スレッドが同期処理を行ったか否かの状態が格納される。格納される値は、“未”、か“完”かの２種類である。“未”は、初期状態であり、対象スレッドが同期処理をまだ行っていない状態を示している。“完”は、対象スレッドが同期処理を既に行った状態を示している。
【００４８】
たとえば、図４に示すスレッドＡは、同期処理を行わなくとも問題がなく、かつ、ユーザに対する応答性に影響を及ぼす同期処理種別が“速”のスレッドであり、応答許容時間が１０［秒］、同期処理をまだ行っていない状態である。同様に、スレッドＢは、同期処理種別が“速”のスレッドであり、応答許容時間が５［秒］、同期処理をまだ行っていない状態である。スレッドＣとスレッドＤは、“他”のスレッドであり、同期処理をまだ行っていない状態である。
【００４９】
スレッド同期履歴テーブル３０２は、スレッド名称、同期スレッド名称、同期処理履歴という３つのフィールドを含む。スレッド名称フィールドには、対象となるスレッドの名称、ＩＤといった、対象スレッドを一意に特定できる情報が格納される。同期スレッド名称フィールドには、対象スレッドと同期処理を行うスレッドの名称が格納される。たとえば、図４では、スレッドＣとスレッドＡが同一の同期グループに属しており、同期処理を行う。同様に、スレッドＤとスレッドＢが同一の同期グループに属しており、同期処理を行う。
【００５０】
なお、同一の同期グループに含まれるスレッドが３つ以上である場合も存在する。この場合、同期スレッド名称フィールドには、同一の同期グループのうち、対象スレッドを除いた他のスレッド群が格納されることになる。たとえば、スレッドＡ、スレッドＣ、スレッドＥが同一の同期グループに属する場合、スレッドＡの同期スレッド名称フィールドには、スレッドＣとスレッドＥが格納される。
【００５１】
同期処理履歴フィールドには、対象スレッドが同期ポイントに到着した際の処理結果が格納される。たとえば、スレッドＣが同期ポイントに到着した際に、処理結果が数値Ｎであれば、同期処理履歴フィールドに数値Ｎが格納される。また、処理結果が画像であれば、画像が格納されたポインタ等が同期処理履歴フィールドに格納される。
【００５２】
マルチコアプロセッサシステム１００は、スレッド属性テーブル３０１とスレッド同期履歴テーブル３０２にアクセスして同期処理を行う。図５〜図１０にて、マルチコアプロセッサシステム１００にて実行中のスレッドＡ〜スレッドＤの処理遷移を、スレッド属性テーブル３０１、スレッド同期履歴テーブル３０２の値と併せて説明を行う。
【００５３】
図５は、スレッドＡ〜スレッドＤが実行開始した状態を示す説明図である。図５に示すＣＰＵｓ２０１内のＣＰＵ＃０〜ＣＰＵ＃３は、ＯＳ５０１＃０〜ＯＳ５０１＃３を実行しており、さらに、ＣＰＵ＃０〜ＣＰＵ＃３は、同期処理を監視する同期チェッカ５０２＃０〜同期チェッカ５０２＃３を実行している。さらに、ＯＳ５０１＃０〜ＯＳ５０１＃３内のスケジューラが、ＣＰＵ＃０〜ＣＰＵ＃３に、スレッドＡ〜スレッドＤを割り当てている。スレッド属性テーブル３０１とスレッド同期履歴テーブル３０２のデータ内容は、同期処理履歴フィールドを除いて図４と等しいため、説明を省略する。
【００５４】
図５における、同期処理履歴フィールドには、スレッドＣの同期処理履歴として、“２”、スレッドＤの同期処理履歴として“４”が格納されている。これらの値は、前回の同期処理時に、同期ポイントに到着した際のスレッドＣ、スレッドＤの処理結果である。また、同期処理履歴フィールドの初期値としては、空欄であってもよいし、設計者等によって初期値が格納されていてもよい。
【００５５】
図６は、スレッドＡが同期ポイントに到着した状態を示す説明図である。スレッドＡが同期ポイントに到着すると、同期チェッカ５０２＃０は、スレッド属性テーブル３０１にアクセスし、スレッドＡの同期処理種別を判断する。スレッドＡの同期処理種別は“速”であるため、スレッドＡは、同期処理を行わなくとも問題がなく、かつ、ユーザに対する応答性に影響を及ぼすスレッドである。したがって、同期ポイントに到着した時刻から応答許容時間１０［秒］が経過しても同期処理が行われていない場合は、スレッドＡを先行実行することになる。応答許容時間が経過したかを判断するため、同期チェッカ５０２＃０は、計測を開始する。
【００５６】
図７は、スレッドＣが応答許容時間内に同期ポイントに到着した状態を示す説明図である。図７では、スレッドＣがスレッドＡの応答許容時間１０［秒］以内に、同期ポイントに到着した場合を示している。同期チェッカ５０２＃２は、スレッドＣの同期スレッドであるスレッドＡの同期状態フラグを確認する。図７の例では応答許容時間以内に到着しているため、スレッドＡの同期状態フラグは“未”のままである。同期スレッドがまだ同期処理を行っていないことを確認した同期チェッカ５０２＃２は、スレッドＡとスレッドＣに、通常通りに同期処理を実行させる。
【００５７】
同期処理終了後、次の同期処理のため、同期チェッカ５０２＃２は、スレッドＡの同期状態フラグとスレッドＣの同期状態フラグを“未”に設定する。また、同期チェッカ５０２＃２は、スレッドＣの同期処理履歴を更新する。図７の例では、スレッドＣの処理結果が“５”であったため、スレッドＣの同期処理履歴を“５”に設定する。
【００５８】
図８は、スレッドＢが同期ポイントに到着した状態を示す説明図である。スレッドＢが同期ポイントに到着すると、同期チェッカ５０２＃１は、スレッドＢの同期処理種別を判断する。スレッドＢの同期処理種別は“速”であるため、同期チェッカ５０２＃０は、計測を開始する。
【００５９】
図９は、スレッドＤが同期ポイントに到着する前に応答許容時間が経過した状態を示す説明図である。図９では、図８にて同期チェッカ５０２＃１が計測を開始した後、応答許容時間５［秒］が経過した状態を示している。応答許容時間の経過を検出した同期チェッカ５０２＃１は、スレッドＤの同期処理履歴から過去の処理結果となる“４”を取得する。スレッドＢは、取得された過去の処理結果とで同期処理を実行する。同期処理実行後、同期チェッカ５０２＃１は、スレッドＢの同期処理履歴を“未”から“完”に設定する。
【００６０】
図１０は、スレッドＤが応答許容時間経過後に同期ポイントに到着した状態を示す説明図である。図１０では、図９にてスレッドＢが先行して実行された後に、スレッドＤが同期ポイントに到着した状態を示している。同期ポイントに到着したことを検出した同期チェッカ５０２＃３は、スレッドＤの同期スレッドであるスレッドＢの同期状態フラグを確認する。図１０の例では応答許容時間経過後に到着しているため、スレッドＢの同期状態フラグは“完”となっている。同期スレッドが同期処理を行ったことを確認した同期チェッカ５０２＃３は、スレッドＤに、同期処理をスキップさせる。
【００６１】
同期処理終了後、次の同期処理のため、同期チェッカ５０２＃３は、スレッドＢの同期状態フラグとスレッドＤの同期状態フラグを“未”に設定する。また、同期チェッカ５０２＃３は、スレッドＤの同期処理履歴を更新する。図１０の例では、スレッドＤの処理結果が“６”であったため、スレッドＤの同期処理履歴を“６”に設定する。
【００６２】
図１１は、複数のユーザが存在する場合の適用例を示した説明図である。図１１の例では、マルチコアプロセッサシステム１００＃Ａ〜マルチコアプロセッサシステム１００＃Ｃが存在し、Ｉ／Ｆ２０７を通じてデータをやりとりしている。図１１で動作しているアプリケーションプログラムは、たとえば、ネットワークゲーム等といった、複数のユーザが存在するプログラムを想定する。前述のネットワークゲームは、たとえば、シミュレーションゲーム等を想定する。ネットワークゲームは、マルチコアプロセッサシステム１００＃Ａ〜マルチコアプロセッサシステム１００＃Ｃを使用するユーザからのコマンドをユーザデータとして受け付け、ユーザデータ群に対応した処理を行う。
【００６３】
また、マルチコアプロセッサシステム１００＃Ａ内には、スレッドＡ〜スレッドＣが存在する。スレッドＡは、ユーザによるキーボード１０４の操作を受け付けてデータを取得する取得処理と、取得後、全てのユーザデータを処理してディスプレイ１０３に表示する表示処理を行うスレッドである。スレッドＢは、Ｉ／Ｆ２０７を経由してマルチコアプロセッサシステム１００＃Ｂからデータを受信するスレッドである。スレッドＣは、Ｉ／Ｆ２０７を経由してマルチコアプロセッサシステム１００＃Ｃからデータを受信するスレッドである。
【００６４】
図１１の例では、スレッドＡがキーボード１０４よりユーザデータＡを取得して同期ポイントに到着し、スレッドＢがＩ／Ｆ２０７よりユーザデータＢを受信して同期ポイントに到着した状態である。しかし、スレッドＣは、マルチコアプロセッサシステム１００＃Ｃとの回線が遮断され、ユーザデータＣを受信できずに同期ポイントに到着できていない状態である。この状態で、スレッドＡの応答許容時間を越えた場合、マルチコアプロセッサシステム１００＃Ａは、取得したユーザデータＡと受信したユーザデータＢとスレッド同期履歴テーブル３０２に格納されている過去のユーザデータＣを用いて、表示処理を実行する。
【００６５】
従来例にかかるネットワークゲームであれば、全てのユーザからのコマンドを取得できない場合、コマンドを破棄するか、到着するまで待ち続ける状態となっており、ユーザに対する応答性が低下していた。しかし、本実施の形態を適用した場合、ネットワークゲームは、取得できないコマンドに関しては前回のコマンドを基に、処理を続行することができ、ユーザに対する応答性を向上することができる。
【００６６】
以下、図１２、図１３にて、図５〜図１０で説明した動作を可能とする同期チェッカ５０２の処理を説明する。同期チェッカ５０２は、ＣＰＵｓ２０１に含まれる全てのＣＰＵで実行されるが、図１２、図１３では、ＣＰＵ＃０で実行される同期チェッカ５０２＃０について説明を行う。また、同期チェッカ５０２が起動されるタイミングは、同期チェッカ５０２を実行するＣＰＵに、スレッドが割り当てられたときである。
【００６７】
図１２は、同期チェッカ５０２の処理を示すフローチャート（その１）である。同期チェッカ５０２＃０は、自ＣＰＵ内の全スレッドが処理終了したか否かを判断する（ステップＳ１２０１）。全スレッドが処理終了した場合（ステップＳ１２０１：Ｙｅｓ）、同期チェッカ５０２＃０は、処理を終了する。なお、自ＣＰＵとなるＣＰＵ＃０に新たなスレッドが起動した場合、同期チェッカ５０２＃０は再び処理を開始する。
【００６８】
全スレッドのうち、処理終了していないスレッドが存在する場合（ステップＳ１２０１：Ｎｏ）、同期チェッカ５０２＃０は、実行中のスレッドを取得し（ステップＳ１２０２）、実行中スレッドが同期ポイントに到着したか否かを判断する（ステップＳ１２０３）。到着していない場合（ステップＳ１２０３：Ｎｏ）、同期チェッカ５０２＃０は、ステップＳ１２０１の処理に移行する。到着していた場合（ステップＳ１２０３：Ｙｅｓ）、同期チェッカ５０２＃０は、実行中スレッドの同期処理種別を確認する（ステップＳ１２０４）。同期処理種別が“他”である場合（ステップＳ１２０４：他）、同期チェッカ５０２＃０は、図１３で示すフローチャートに移行する。
【００６９】
同期処理種別が“速”である場合（ステップＳ１２０４：速）、同期チェッカ５０２＃０は、同期ポイントに到着した時刻を計測開始時刻として、待ち時間を計測開始する（ステップＳ１２０５）。計測開始後、同期チェッカ５０２＃０は、実行中スレッドの同期スレッドが、同期ポイントに到着しているか否かを判断する（ステップＳ１２０６）。
【００７０】
なお、同期スレッドが同期ポイントに到着しているか否かは、同期スレッドの同期状態フラグを確認することで、判断することができる。具体的には、同期状態フラグが“完”であれば、同期スレッドが同期ポイントに到着しており、同期状態フラグが“未”であれば、同期スレッドが同期ポイントに到着していないことになる。また、同期スレッドは複数存在する場合もある。その場合、全ての同期スレッドが同期ポイントに到着している場合、同期チェッカ５０２＃０はステップＳ１２０６：Ｙｅｓの処理を実行する。全ての同期スレッドのうち、同期ポイントに到着していないスレッドが１つ以上存在する場合、同期チェッカ５０２＃０は、ステップＳ１２０６：Ｎｏの処理を実行する。
【００７１】
同期ポイントに到着していない場合（ステップＳ１２０６：Ｎｏ）、同期チェッカ５０２＃０は、待ち時間が応答許容時間を越えたか否かを判断する（ステップＳ１２０７）。越えていない場合（ステップＳ１２０７：Ｎｏ）、同期チェッカ５０２＃０は、ユーザからの頻繁なキー入力があったか否かを判断する（ステップＳ１２０８）。なお、頻繁なキー入力の判断基準としては、たとえば、単位時間あたりに、キーボード１０４の入力が一定以上あった場合、同期チェッカ５０２＃０は頻繁なキー入力があったと判断するように設定してもよい。
【００７２】
頻繁なキー入力がなかった場合（ステップＳ１２０８：Ｎｏ）、同期チェッカ５０２＃０は、ステップＳ１２０６の処理に移行する。頻繁なキー入力があった場合（ステップＳ１２０８：Ｙｅｓ）、同期チェッカ５０２＃０は、計測開始時刻から、ユーザからの頻繁なキー入力があった時刻までを応答要求時間に設定する（ステップＳ１２０９）。設定後、同期チェッカ５０２＃０は、新たな応答許容時間を、（応答要求時間＋応答許容時間）／２に設定し（ステップＳ１２１０）、ステップＳ１２０６の処理に移行する。図１２の例では、新たな応答許容時間の算出方法を、相加平均を用いて算出しているが、相乗平均、調和平均等、他の平均方法を用いて算出してもよい。
【００７３】
待ち時間が応答許容時間を越えた場合（ステップＳ１２０７：Ｙｅｓ）、同期チェッカ５０２＃０は、実行中スレッドに、他スレッドの同期処理履歴を基に同期処理の実行要求をする（ステップＳ１２１１）。続けて、同期チェッカ５０２＃０は、実行中スレッドの同期状態フラグを“完”に変更し（ステップＳ１２１２）、ステップＳ１２０１の処理に移行する。
【００７４】
実行中スレッドの同期スレッドが同期ポイントに到着している場合（ステップＳ１２０６：Ｙｅｓ）、同期チェッカ５０２＃０は、実行中スレッドと同期スレッドとで同期処理を実行させる（ステップＳ１２１３）。同期処理を実行させた後、同期チェッカ５０２＃０は、実行中スレッドと同期スレッドの同期状態フラグを“未”に変更し（ステップＳ１２１４）、ステップＳ１２０１の処理に移行する。
【００７５】
図１３は、同期チェッカ５０２の処理を示すフローチャート（その２）である。実行中スレッドの同期処理種別が“他”である場合、同期チェッカ５０２＃０は、同期スレッド内で同期処理種別が“速”であるスレッドが存在するか否かを判断する（ステップＳ１３０１）。同期処理種別が“速”であるスレッドが存在する場合（ステップＳ１３０１：Ｙｅｓ）、同期チェッカ５０２＃０は、同期スレッド内の同期処理種別が“速”であるスレッドのうち、同期状態フラグが“完”であるスレッドが存在するかを判断する（ステップＳ１３０２）。
【００７６】
なお、同期スレッド内に、同期処理種別が“速”であるスレッドが複数存在する場合もありえる。この場合、同期処理種別が“速”であるスレッドのうち、同期状態フラグが“完”となるスレッドが１つでも存在する場合、同期チェッカ５０２＃０は、ステップＳ１３０２：Ｙｅｓの処理を実行する。全て“未”であった場合、同期チェッカ５０２＃０は、ステップＳ１３０２：Ｎｏの処理を実行する。
【００７７】
同期処理種別が“速”であるスレッドが存在しない場合（ステップＳ１３０１：Ｎｏ）、または、同期状態フラグが“完”であるスレッドが存在しない場合（ステップＳ１３０２：Ｎｏ）、同期チェッカ５０２＃０は、実行中スレッドと同期スレッドとで同期処理を実行させる（ステップＳ１３０３）。
【００７８】
同期状態フラグが“完”であるスレッドが存在する場合（ステップＳ１３０２：Ｙｅｓ）、同期チェッカ５０２＃０は、実行中スレッドに同期処理をスキップするように指示する（ステップＳ１３０４）。指示後、同期チェッカ５０２＃０は、同期スレッド内の実行中スレッド以外の全てのスレッドの同期状態フラグが“完”か否かを判断する（ステップＳ１３０５）。
【００７９】
実行中スレッド以外の全てのスレッドの同期状態フラグが“完”である場合（ステップＳ１３０５：Ｙｅｓ）、同期チェッカ５０２＃０は、同期スレッド全ての同期状態フラグを“未”に変更する（ステップＳ１３０６）。実行中スレッド以外の全てのスレッドの同期状態フラグが“完”でない場合（ステップＳ１３０５：Ｎｏ）、同期チェッカ５０２＃０は、実行中スレッドの同期状態フラグを“完”に変更する（ステップＳ１３０７）。
【００８０】
ステップＳ１３０３、ステップＳ１３０６、ステップＳ１３０７の処理の終了後、同期チェッカ５０２＃０は、実行中スレッドの処理結果を同期処理履歴に格納し（ステップＳ１３０８）、ステップＳ１２０１の処理に移行する。
【００８１】
以上説明したように、同期処理方法によれば、ユーザ応答を行う第１の種別となる第１スレッドが同期ポイントに到着し、第１スレッドと同期を取る第２の種別となる第２スレッドの到着が遅い場合、第２スレッドの処理履歴を用いて第１スレッドを先行実行する。これにより、同期処理方法を実行するコンピュータは、ユーザ応答を早く行えるようになるため、ユーザに対する応答性を向上させることができる。
【００８２】
また、第２スレッドの履歴を用いて第１スレッドを先行実行するため、第２スレッドの処理結果が処理履歴と比べて大きく変化しない場合、本同期処理方法は特に有効である。たとえばＷｅｂページを再読み込みした場合、第２スレッドの処理履歴と第２スレッドの処理結果とは、Ｗｅｂページが更新されていない場合等しくなるため、コンピュータが本実施の形態にかかる同期処理方法を適用すると、特に効果がある。
【００８３】
また、第１の種別と第２の種別の分け方については、設計者等が、スレッド間の同期処理を行わなくとも問題が少ないか否かに応じて、スレッドごとにレベル分けを行う。これにより、コンピュータは、重大な問題を及ぼさないスレッドと同期ポイントに到着していないスレッドの過去の処理履歴とで同期処理を行い、後続の処理を投機的に実行することで、ユーザに対する応答性を向上することができる。
【００８４】
また、同期処理方法は、第１スレッドが同期ポイントに到着した時点から、応答許容時間が経過したかを判定し、経過していた場合に、第１スレッドと第２スレッドの過去の処理履歴とで同期処理を行い、第１スレッドを先行実行させてもよい。これにより、同期処理方法を実行するコンピュータは、ユーザが不快に感じない時間まで第２スレッドの到着を待つことができる。
【００８５】
また、同期処理方法は、ユーザからの処理要求があった場合に、応答許容時間を早めてもよい。これにより、同期処理方法を実行するコンピュータは、ユーザが不快に感じたと判断した際に、第１スレッドを先行させる時刻を早め、ユーザに対する応答性をより向上することができる。
【００８６】
また、同期処理方法は、第１スレッドと第２スレッドの過去の処理履歴とで同期処理を行い、第１スレッドが先行実行した後、第１スレッドの同期状態フラグを、完了を示す値に設定してもよい。これにより、同期処理方法を実行するコンピュータは、第２スレッドが同期ポイントに到着したときに、既に第１スレッドが同期処理を完了していることを判断することができる。
【００８７】
また、同期処理方法は、第１スレッドと第２スレッドとの同期処理が行われた場合、第１スレッドの同期状態フラグと、第２スレッドの同期状態フラグを、初期状態を示す値に設定してもよい。これにより、同期処理方法を実行するコンピュータは、第１スレッドと第２スレッドが最初の同期処理に対して本同期処理方法を行った後、続けて次の同期処理に対しても本同期処理方法を適用することができる。
【００８８】
また、同期処理方法は、第１スレッドの同期処理の種別が第２の種別であるとき、第２スレッドの同期処理の種別を判定してもよい。これにより、同期処理方法を実行するコンピュータは、第２のスレッドの同期処理の種別に応じて処理内容を変更できる。
【００８９】
また、同期処理方法は、第１スレッドの同期処理の種別が第２の種別であり、第２スレッドの同期処理の種別が第１の種別であって、第２スレッドの同期状態フラグが完了を示していた場合、第１スレッドと第２スレッドとの同期処理をスキップしてもよい。この場合、第２スレッドは同期処理が既に完了した状態であるため、同期処理方法を実行するコンピュータは、同期処理を省略しスキップすることで、同期処理を実行したことと同じ状態にできる。
【００９０】
また、同期処理方法は、第１スレッドの同期処理の種別と、第２スレッドの同期処理の種別が共に第２の種別である場合、第１スレッドと第２スレッドの同期処理を行ってもよい。これにより、同期処理方法を実行するコンピュータは、同期処理を行わないとデータの整合性が取れなくなる場合には、全てのスレッドが同期ポイントに到着するまで待機し、データの整合性を保つことができる。
【００９１】
また、同期処理方法は、第１スレッドと第２スレッドとの同期処理をスキップした場合、第１スレッドと第２スレッドの同期状態フラグを、初期状態を示す値に設定してもよい。これにより、同期処理方法を実行するコンピュータは、第１スレッドと第２スレッドが本同期処理方法の特徴である処理履歴を用いた同期処理を行った後、続けて次の同期処理に対しても本同期処理方法を適用することができる。
【００９２】
また、同期処理方法は、同期処理の種別が第２の種別であるスレッドに対して、対象のスレッドの同期処理履歴に同期ポイントに到着した際の処理結果を記録してもよい。たとえば、第１スレッドの同期処理の種別が第１の種別、第２スレッドの同期処理の種別が第２の種別であると想定する。このとき、第１スレッドと第２スレッドが同期処理を行った後続けて同期処理を行う際に、第２スレッドの同期ポイントへの到着が遅れた場合、第１スレッドが第２スレッドの同期処理履歴を用いることで処理を先行することができる。
【００９３】
また、同期処理方法は、ユーザからの処理要求に関して、外部インターフェイスからの入力数が所定値を超えた場合に、ユーザからの処理要求と判断してもよい。たとえば、ユーザによるキーボードの連打が行われた場合、同期処理方法を実行するコンピュータは、ユーザからの処理要求と判断する。キーボードの連打は、Ｗｅｂページが開かない、または画面が遷移しない、等といった動作に対してユーザが不快と感じたときに行われる行為である。したがって、同期処理方法を実行するコンピュータは、ユーザが不快と感じたときに行われる行為に対応してユーザ応答を早く行えるようになるため、ユーザに対する応答性をより向上させることができる。
【００９４】
なお、本実施の形態で説明した同期処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。また、本同期処理方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本同期処理方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【００９５】
＃０、＃１  ＣＰＵ
１００  マルチコアプロセッサシステム
２０３  ＲＡＭ
２０８  バス
３０１  スレッド属性テーブル
３０２  スレッド同期履歴テーブル
３０３  記憶部
３０４  検出部
３０５  判定部
３０６  制御部
【図１】
2012086041.tif 000003
【図２】
2012086041.tif 000004
【図３】
2012086041.tif 000005
【図４】
2012086041.tif 000006
【図５】
2012086041.tif 000007
【図６】
2012086041.tif 000008
【図７】
2012086041.tif 000009
【図８】
2012086041.tif 000010
【図９】
2012086041.tif 000011
【図１０】
2012086041.tif 000012
【図１１】
2012086041.tif 000013
【図１２】
2012086041.tif 000014
【図１３】
2012086041.tif 000015
【国際調査報告】
2012086041.tif 000016
2012086041.tif 000017