(57)【要約】【課題】ロックをスレッドへ割り当てる方法および処理を提供する。【解決手段】実施形態には、ロックをスレッドに割り当てるための変換式、コード、状態マシン、論理などが含まれる。実施形態には、スレッドのタイム・スライスの終わりに時間窓を設定する事が含まれても良い。実施形態にはまた、スレッドが時間窓内であるという判断、およびスレッドがいずれのロックも保持していないという判断に基づき、時間窓中にスレッドがロックを獲得する事を防止する事が含まれても良い。別の実施形態には、ロックをスレッドに割り当てる装置、およびロックをスレッドに割り当てるコンピュータ・プログラムが含まれる。【選択図】図３
2010020759.tif 000002
【特許請求の範囲】
【請求項１】
ロックをスレッドに割り当てる方法であって、
時間窓をスレッドのタイム・スライスの終わりに設定することと、
前記スレッドが前記時間窓内であるという判断および前記スレッドがいずれのロックも保持していないという判断に基づいて、前記スレッドが前記時間窓中にロックを獲得することを防止することと、
を備える方法。
【請求項２】
前記時間窓の開始を格納するためにメモリの領域を登録することと、
前記スレッドのスケジューリングに基づいて前記メモリの領域に前記時間窓の前記開始を格納することと、
をさらに備える、請求項１に記載の方法。
【請求項３】
前記割り当てがＲＡＭ内のメモリの領域を割り当てることである、請求項２に記載の方法。
【請求項４】
前記割り当てがレジスタ内のメモリの領域を割り当てることである、請求項２に記載の方法。
【請求項５】
前記防止することおよび前記スレッドがいずれのロックも保持していないという前記判断することが、
前記スレッドが前記時間窓内でロックをリクエスト済みであることを判断することと、
前記スレッドがいずれのロックも保持していないことを判断することと、
前記スレッドの前記タイム・スライスの残りについて前記スレッドをタイムアウトすることと、
を備える、請求項１に記載の方法。
【請求項６】
前記設定が前記時間窓の期間を調節することを備える、請求項１に記載の方法。
【請求項７】
ロックをスレッドに割り当てる方法であって、
スレッドのタイム・スライスの終わりに時間窓を設定することと、
前記スレッドが、前記時間窓内でロックを開放済みであることを判断することと、
前記スレッドが他のロックを保持していないことを判断することと、
前記スレッドが前記時間窓内であるという判断および前記スレッドがいずれのロックも保持していないという判断に基づき、前記スレッドの前記タイム・スライスの残りについて前記スレッドをタイムアウトすることと、
を備える、方法。
【請求項８】
前記方法が、
前記時間窓の開始を格納するためにメモリの領域をスレッド・ライブラリにより登録することと、
前記スレッドをスケジューリングすることと、
前記時間窓の前記開始をカーネルにより前記スレッド・ライブラリへ伝えることと、
前記メモリの領域に前記時間窓の前記開始を格納することと、
をさらに備え、
前記スレッドが前記時間窓内でロックを開放済みであるという判断および前記スレッドが他のロックを保持していないという判断が、前記スレッド・ライブラリにより前記スレッドが前記時間窓内にロックを開放済みであるということを判断することおよび前記スレッド・ライブラリにより前記スレッドが他のロックを保持していないということを判断することと、
を備える、請求項７に記載の方法。
【請求項９】
前記設定は、割合を選択すること、および前記割合により前記スレッドの前記タイム・スライスを増加させることを備える、請求項７に記載の方法。
【請求項１０】
ロックをスレッドに割り当てる装置であって、前記装置が、フローティング・アプリケーションを備え、前記フローティング・アプリケーションが、
スレッドのタイム・スライスの終わりに時間窓を設定する時間窓ディターミナと、
前記スレッドが前記時間窓内であるという判断および前記スレッドがいずれのロックも保持していないという判断に基づいて、前記スレッドが前記時間窓中にロックを獲得することを防止するロック・スーパバイザと、
を備える、装置。
【請求項１１】
前記装置が、
メモリと、
スレッド・スケジューラと
をさらに備え、
前記装置は、前記時間窓の開始を格納するためにメモリの領域を登録し、かつ前記スレッドのスケジューリングに基づき前記メモリの領域に前記時間窓の前記開始を格納することになる、請求項１０に記載の装置。
【請求項１２】
前記ロック・スーパバイザは、前記スレッドが前記時間窓内にロックを開放済みであること、および前記スレッドが他のロックを保持していないことを判断することになり、
前記装置は、前記スレッドの前記タイム・スライスの残りについて前記スレッドをタイムアウトすることになる、
請求項１０に記載の装置。
【請求項１３】
ロックをスレッドに割り当てるコンピュータ・プログラムであって、前記コンピュータ・プログラムが、コンピュータ使用可能プログラム・コードが具現化されたコンピュータ使用可能記憶媒体を備え、前記コンピュータ使用可能プログラム・コードが、
スレッドのタイム・スライスの終わりに時間窓を設定するように構成されたコンピュータ使用可能プログラム・コードと、
前記スレッドが前記時間窓内であるという判断、および前記スレッドがいずれのロックも保持していないという判断に基づき、前記スレッドが前記時間窓中にロックを獲得することを防止するよう構成されたコンピュータ使用可能プログラム・コードと、
を備える、コンピュータ・プログラム。
【請求項１４】
前記コンピュータ使用可能プログラム・コードが、
前記時間窓の開始を格納するためにメモリの領域を登録するよう構成されたコンピュータ使用可能プログラム・コードと、
前記スレッドのスケジューリングに基づき前記メモリの領域に前記時間窓の前記開始を格納するよう構成されたコンピュータ使用可能プログラム・コードと、
をさらに備える、請求項１３に記載のコンピュータ・プログラム。
【請求項１５】
割り振るよう構成された前記コンピュータ使用可能プログラム・コードが、ＲＡＭ内のメモリの領域を割り振るよう構成されたコンピュータ使用可能プログラム・コードを備える、請求項１３に記載のコンピュータ・プログラム。
【請求項１６】
割り振るよう構成された前記コンピュータ使用可能プログラム・コードが、レジスタ内のメモリの領域を割り振るよう構成されたコンピュータ使用可能プログラム・コードを備える、請求項１３に記載のコンピュータ・プログラム。
【請求項１７】
防止しかつ前記スレッドがいずれのロックも保持していないことを判断するよう構成された前記コンピュータ使用可能プログラム・コードが、
前記スレッドが前記時間窓中にロックを開放済みであることを判断するよう構成されたコンピュータ使用可能プログラム・コードと、
前記スレッドが他のロックを保持していないということを判断するよう構成されたコンピュータ使用可能プログラム・コードと、
前記スレッドの前記タイム・スライスの残りについて前記スレッドをタイムアウトするよう構成されたコンピュータ使用可能プログラム・コードと、
を備える、請求項１３に記載のコンピュータ・プログラム。
【請求項１８】
防止しかつ前記スレッドがいずれのロックも保持していないことを判断するよう構成された前記コンピュータ使用可能プログラム・コードが、
前記スレッドが前記時間窓内でロックをリクエスト済みであることを判断するよう構成されたコンピュータ使用可能プログラム・コードと、
前記スレッドがいずれのロックも保持していないことを判断するよう構成されたコンピュータ使用可能プログラム・コードと、
前記スレッドの前記タイム・スライスの残りについて前記スレッドをタイムアウトするよう構成されたコンピュータ使用可能プログラム・コードと、
を備える、請求項１３に記載のコンピュータ・プログラム。
【請求項１９】
時間窓を設定するよう構成された前記コンピュータ使用可能プログラム・コードが、割合を選択し、かつ前記割合により前記タイム・スライスを増加するよう構成されたコンピュータ使用可能プログラム・コードを備える、請求項１３に記載のコンピュータ・プログラム。
【請求項２０】
時間窓を設定するよう構成された前記コンピュータ使用可能プログラム・コードが、前記時間窓の期間を調節するよう構成されたコンピュータ使用可能プログラム・コードを備える、請求項１３に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理分野に関する。特に、本発明は、ロックをスレッドに割り当てる方法および処理に関する。
【背景技術】
【０００２】
多くのコンピュータ・プロセスは、スレッドと呼ばれる、軽量の、半独立のセクションから構成されている。この独立性は、プロセスの正しい動作に対して問題を引き起こす可能性がある。スレッドがデータ上で同時に動作することを防止する機構がないために、スレッドの使用は不正な結果を招くこともある。たとえば、プログラムが銀行口座を扱うこともある。このプログラムのあるスレッド、デポジット（Ｄｅｐｏｓｉｔ）が預金を扱い、別のウィズドロウアル（Ｗｉｔｈｄｒａｗａｌ）というスレッドが引き出しを取り扱うとする。
デポジットは以下のステップを行うとする：
現在の残高を入手、
預金額を現在の残高に加算、
最新の残高を格納。
同様に、ウィズドロウアルは以下のステップを行うとする：
現在の残高を入手、
引出額を現在の残高から減額、
最新の残高を格納。
【０００３】
ジョンの初期残高を２，０００ドル、預金額を５００ドル、引出額を３０ドルと仮定する。防止策がないために、デポジットおよびウィズドロウアル・スレッドは以下のように動作する可能性がある：
トランザクション                              金額
デポジットが現在残高を入手          ２，０００ドル
ウィズドロウアルが現在残高を入手    ２，０００ドル
デポジットが残高を増額              ２，５００ドル（デポジット・スレッドに格納される値）
デポジットが残高を格納                  ２，５００ドル（ジョンの残高に格納される値）
ウィズドロウアルが現在残高を減額        １，９７０ドル（ウィズドロウアル・スレッドに格納される値）
ウィズドロウアルが残高を格納            １，９７０ドル（ジョンの残高に格納される値）
この例では、２つのスレッドによる銀行口座への同時アクセスにより、不正な口座残高が生じた。実際には、預金トランザクションが反映されなかった。ウィズドロウアル・スレッドは、デポジット・スレッドが残高を増額する前にジョンの口座の残高を入手し、最新の合計を計算し、その合計を、デポジット・スレッドが処理を終えた後に格納した。
【０００４】
上述のようなエラーを防ぐために、コンピュータ・プログラムが、特定の条件、ロックと呼ばれる原理、において同時に１つのスレッドしかデータにアクセスできないようにしても良い。デポジット・スレッドは、上述の例においてロックを使用して、残高を入手する前に銀行口座上でロックを獲得すれば良い。デポジットは、その後、残高を２，５００ドルまで増額し、口座の処理を完了すれば良い。デポジットがロックを保持していたので、ウィズドロウアルは、デポジットが処理を終えるまで、現在残高の入手のためにジョンの口座にアクセスすることが許可されない。デポジットがロックを開放後、ウィズドロウアルがロックを獲得する。ウィズドロウアルは、今度は口座へアクセスし、動作開始時に２，５００ドルになった残高を入手し、口座の処理を続け、２，４７０ドルという正しい結果を出せば良い。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
スレッドは、別のスレッドにより保持されているロックを入手するために待機している間、アイドル状態であっても良い。ロックを所持しているスレッドは、再びタイム・スライスを獲得、処理を完了し、そのロックを開放するまでにタイムアウトして、別のスレッドがそのロックを入手できない状態にしても良い。
【課題を解決するための手段】
【０００６】
上記で特定した課題は、大部分がロックをスレッドに割り当てる方法および処理により対処される。一実施形態では、ロックをスレッドに割り当てる方法が提供される。この方法には、スレッドのタイム・スライスの終わりに時間窓を設定することを含めても良い。この方法にはまた、スレッドがこの時間窓内であるという判断およびそのスレッドがいずれのロックも保持していないという判断に基づき、その時間窓中にスレッドがロックを獲得することを防止することを含めても良い。別の実施形態には、ロックをスレッドに割り当てる装置およびロックをスレッドに割り当てるコンピュータ・プログラムが含まれる。
【０００７】
本発明の効果は、以下の詳細な説明と添付の図面を参照することで明らかとなるであろう。図面では、同じ参照番号が同様の要素を示す。
【図面の簡単な説明】
【０００８】
【図１】時間窓に基づきロックをスレッドに割り当てることが可能なコンピュータを示す。
【図２】時間窓に基づきロックをスレッドに割り当てる装置を示す。
【図３】時間窓に基づきロックをスレッドに割り当てる方法のフローチャートを示す。
【図４】時間窓に基づくロックのスレッドへの割り当てを例示する時系列を示す。
【図５】図５Ａは、ロックのスレッドへの割り当てを例示する時系列を示し、図５Ｂは、時間窓に基づくロックのスレッドへの割り当てを例示する別の時系列を示す。
【発明を実施するための形態】
【０００９】
以下は、添付図面で示される本発明の実施形態の詳細説明である。これらの実施形態は、本発明を明確に伝達するように詳細に記載されている。しかし、開示される詳細さによって、予想される実施形態の変更を限定するものではなく、反対に、本発明は、添付の特許請求項によって定められる本発明の精神および範囲内の全ての変更形態、均等物および代替物を包含する。以下の詳細説明は、そうした実施形態を当業者に明確にするよう構成されている。
【００１０】
全体として、時間窓に基づいてロックをスレッドに割り当てる方法および処理を検討する。実施形態には、スレッドのタイム・スライスの終わりに時間窓を設定するための変換式、コード、状態マシン、論理などが含まれる。実施形態には、また、スレッドが時間窓内で、いずれのロックも保持していないという前提で、時間窓中にそのスレッドがロックを獲得するのを防止することが含まれても良い。
【００１１】
別の実施形態においては、スレッドが開始される際に、スレッド・ライブラリが時間窓の開始時間を格納するためにメモリの領域を登録しても良い。スケジューラがタスクをスケジュールする際に、カーネルが時間窓の開始をスレッド・ライブラリに伝えても良い。場合によっては、開始がタイム・スライスの満了時間前のある一定の短い時間であることもある。スレッドの実行中にロックが開放される度に、スレッド・ライブラリが、そのロックが、そのスレッドが保持する唯一のロックであるかを確認しても良い。唯一のロックである場合は、スレッド・ライブラリが、そのスレッドが時間窓の開始を過ぎたかを確認しても良い。開始を過ぎた場合は、そのスレッドが、他のスレッドがスケジュールされるよう譲歩しても良い。
【００１２】
具体的な実施形態が以下で特定の回路または論理構成を参照して説明されるが、当業者なら、本発明の実施形態が、他のほぼ同等の構成で実装された方が好都合なこともあることがわかるであろう。
【００１３】
図１は、ランダム・アクセス・メモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：ＲＡＭ）１０５、プロセッサ１３０すなわちＣＰＵ、不揮発性メモリ１４０、通信アダプタ１５０およびシステム・バス１８５により接続されたＩ／Ｏ（入出力）インターフェース・アダプタ１６０を有する、本発明の実施形態によるロックをスレッドへ割り当てることが可能なコンピュータ１００の一実施形態を示す。ＲＡＭ１０５に格納されているのはオペレーティング・システム１１０およびアプリケーション・プログラム１２５である。オペレーティング・システム１１０は、メモリ・アクセス、入出力リソースへのアクセス、およびプロセッサへのアクセスを含むシステム・リソースを他のプログラムで利用できるようにすることが可能なシステム・ソフトウェアのレイヤである。オペレーティング・システム１１０は、また、コンピュータ・リソースへのアクセスの割り当ておよび認証を制御しても良い。オペレーティング・システムは、キーボードからの入力の認識、表示画面への出力の送信、磁気ディスク・ドライブ上のファイルのトラックならびにディレクトリの保持、およびディスク・ドライブならびにプリンタを始めとする周辺機器の制御などの低レベルの基本的なタスクを実施する。このオペレーティング・システムはまた、無許可ユーザが確実にシステムにアクセスできないようにし、セキュリティも担う。ロックのスレッドへの割り当てに利用可能なオペレーティング・システムには、ＵＮＩＸ（Ｒ）、Ｌｉｎｕｘ（Ｒ）、Ｓｏｌａｒｉｓ（Ｒ）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  ＸＰ（Ｒ）ならびにＶｉｓｔａ（Ｒ）、ＡＩＸ（Ｒ）、ＩＢＭのｉ５／ＯＳ（Ｒ）、および当業者が思いつくであろうその他が含まれる。オペレーティング・システム１１０には、カーネル１１５およびスレッド・ライブラリ１２０が含まれる。
【００１４】
カーネル１１５は、メモリに常駐し、基本的なサービスを提供するオペレーティング・システム１１０の基本機能を備えることも可能である。カーネル１１５は、コンピュータ１００のハードウェア・レベルにもっとも近いオペレーティング・システム１１０の構成部分であっても良い。カーネル１１５は、ハードウェアを直接的に起動しても良く、または、ハードウェアを駆動する別のソフトウェア・レイヤへインタフェースを介して接続しても良い。図１の実施形態においては、カーネル１１５がタイム・スライスをスレッドに割り当てることでそのスレッドをスケジュールしても良い。カーネル１１５は、また、スレッドがシステム・リソースを利用できるようにする機能を提供しても良い。一部の実施形態では、カーネル１１５が、カーネル・スレッドにリソースを提供し、プロセッサにそのカーネル・スレッドをスケジューリングすることで、そのカーネル・スレッドをサポートすることもある。
【００１５】
スレッド・ライブラリ１２０は、ユーザ・スレッドをサポートするルーチンを備えても良い。ユーザ・スレッドは、ユーザ・アプリケーションにより作成されるスレッドである。このアプリケーションは、たとえば、スレッドの作成をサポートする、Ｊａｖａ（Ｒ）、Ｃ、またはＣ＋＋を始めとする言語でプログラムされても良い。スレッドは、実行可能なコンピュータ・プログラム命令の個別のストリームである。スレッドは、以下の特徴を有することもある：
・独自の制御の独立フォローをプロセス内に有する。
・リソースをプロセス内の他のスレッドと共有する。
・プロセスの終了前に自主的に終了することが可能である。
【００１６】
スレッドは、独立してプログラムを実行しているプロセスにより生成されても良い。プロセスのリソースには、アドレス空間、共有ライブラリ、プロセッサ・レジスタ、コード・セグメントとオフセット・レジスタ、データ・セグメントとオフセット・レジスタ、スタック・セグメントとオフセット・レジスタ、フラグ・レジスタ、インストラクション・ポインタ・レジスタ、プログラム・カウンタ、およびソフトウェア・プログラムの実行に必要なその他のリソースが含まれても良い。プロセスは、さらにスレッドとして構成されても良い。複数のユーザ・スレッドがひとつのプロセス内に存在し、これらのプロセスのリソースを利用することが可能であり、その上、オペレーティング・システムによりスケジュールされ、ひとつのプロセス内で独立した存在として実行されることが可能である。各ユーザ・スレッドについては制御の独立したフローを有することが可能であり、さらに自身のリソースを維持するのでスケジュールすることが可能である。ひとつのプロセスの各スレッドが別個のレジスタとスタックを有することも可能であるが、各スレッドが同一のメモリ空間を共有することもでき、かつ、同一のメモリ・アドレスを読み込んだり、そこへ書き込んだりすることが可能なこともある。
【００１７】
スレッド・ライブラリ１２０は、ロックのユーザ・スレッドへの割り当てを含むスレッドの実行を管理しても良い。多くの実施形態では、スレッド・ライブラリ１２０がユーザ・スレッドをカーネル・スレッドへマッピングすることで、ユーザ・スレッドにリソースを提供することもある。ロックをスレッドに割り当てるのに利用可能なスレッド・ライブラリには、ＰＯＳＩＸ  Ｐｔｈｒｅａｄｓ、Ｗｉｎ３２スレッドおよびＪａｖａスレッドが含まれる。
【００１８】
アプリケーション・プログラム１２５は、コンピュータ・アプリケーションを実行するためのコンピュータ・プログラム命令を備えても良い。このプログラムを実行することで作成されるプロセスが、ユーザ・スレッド１２８を作成しても良い。スレッド・ライブラリ１２０がユーザ・スレッド１２８の実行を管理しても良く、さらに、ユーザ・スレッド１２８をカーネル１１５のスレッドへマッピングしても良い。
【００１９】
オペレーティング・システム１１０およびアプリケーション・プログラム１２５（ソフトウェアのコンポーネンツ）は、図１内のＲＡＭ１０５内で示されているが、そうしたソフトウェアの多くのコンポーネンツは、また、不揮発性メモリ１４０内に格納されても良い。さらに、そのようなコンポーネンツは、ＲＡＭ内に同時に存在するように示されているが、いくつかの他の実施形態では、ＲＡＭ１０５のいくつかのコンポーネンツだけが所定時間に存在することもある。
【００２０】
不揮発性メモリ１４０を、ハード・ディスク・ドライブ１４２、光学ディスク・ドライブ１４４、電気的消去可能なプログラム可能読み取り専用メモリ空間（ＥＥＰＲＯＭ：ｅｌｅｃｔｏｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ  ｓｐａｃｅ、またはフラッシュ・メモリ）１４６、ＲＡＭドライブ（図示せず）として、または当業者が思いつくであろうその他のいかなる種類のコンピュータ・メモリとして実装することもできる。通信アダプタ１５０は、１台のコンピュータが直接、またはネットワークを介して別のコンピュータ１５５のような別のコンピュータへデータ通信を送信するハードウェア・レベルのデータ通信を実行しても良い。そのようなデータ通信は、ＲＳ−１３２接続を介したり、ＵＳＢなどの外部パスを介したり、ＩＰネットワークなどのデータ通信ネットワークを介したり、当業者が思いつくであろうその他の方法で順次実行されても良い。通信アダプタの例には、有線ダイアルアップ接続用のモデム、有線ネットワーク通信用イーサネット（ＩＥＥＥ８０２.３）アダプタ、無線ネットワーク通信用８０２.１１ａ／ｂ／ｇ／ｎアダプタ、およびモバイル・ブロードバンド・カードが含まれる。
【００２１】
Ｉ／Ｏインターフェース・アダプタ１６０は、たとえば、ディスプレイ・デバイス１６５および音声出力デバイス１７０などのディスプレイ・デバイスへの出力ならびに、ユーザ入力デバイス１７５および音声入力デバイス１８０からのユーザ入力の制御用ソフトウェア・ドライバおよびコンピュータ・ハードウェアを介してユーザ志向の入出力を実施する。ユーザ入力デバイス１７５には、キーボードおよびマウスの両方が含まれても良い。一部の実施形態では、スピーチ・インタプリタ、バーコード・スキャナ、テキスト・スキャナ、タブレット、タッチ・スクリーンを始めとするその他のユーザ入力デバイス、またはその他の形式のユーザ入力デバイス、あるいはその両方を有しているものもある。音声出力デバイス１７０には、スピーカーまたはヘッドホンを含めても良く、かつ、音声入力デバイス１８０には、マイクロフォンなどの音を捉えるデバイスが含まれても良い。
【００２２】
図１でコンピュータおよびコンポーネンツを図示したのは、説明のためであって、制限のためではない。他の実施形態では、組み込み型システム、ＰＤＡ、携帯電話、ＢｌａｃｋＢｅｒｒｉｅｓ（Ｒ）などのデバイスがロックをスレッドに割り当てても良い。別の実施形態では、ロックをスレッドに割り当てるモジュールが、ハードウェア、ファームウェア、もしく状態マシンに実装されても良く、または、オペレーティング・システムのコンポーネンツを形成しても良い。いくつかの実施形態では、コンピュータ・デバイスに２つ以上のプロセッサを含めて良い。種々の実施形態では、コンピュータ・デバイスが、地点間相互接続を使用して、プロセッサ同士を接続したり、または、一つのプロセッサとコンピュータ・システムの別の要素を接続しても良い。
【００２３】
図２を参照すると、ロックをスレッドへ割り当てるタスク実行モジュール２００の一実施形態が図示されている。ロックは、２つ以上のスレッドがデータ上で同時に動作し、そのデータを破壊してしまうことを防止するための仕組みである。ロックは、別々のスレッドが同一のメモリ・アドレスを読み込んだり、そこに書き込んだりすることもできるので有益である。データ破壊を防止する機構は、「相互排除」または「ミューテックス」と呼ばれる。相互排除では、コードにおける共有データの読み出し、または修正を行う部分が「危険域」と定義され、かつ、一部の機構が、２つのスレッドが、同時に同一共有データの危険域に決して存在しないことを保証するために実装される。２つのスレッドが、同時に同一共有データの危険域に決して存在しないよう保証する機構は、本明細書では、「ロック」と呼ばれる。ロックの例としては、ＵＮＩＸ（Ｒ）のセマフォ、Ｃ＋＋におけるモニタ・クラス、およびＪａｖａにおけるｓｙｎｃｈｒｏｎｉｚｅｄメソッドがある。共有データの危険域への排他的アクセスを要求するスレッドは、ロックをリクエストすると言われる。共有データの危険域への排他的アクセスを有するスレッドは、ロックを保持していると言われる。ロックのリクエストは、一般に、ロックがすぐに利用可能にならない場合、そのロックが利用可能になるまでリクエストを出しているスレッドを待ち状態に入れておくシステム・コールを用いて実施される。場合によっては、ロックを保持しているスレッドがタイムアウトすることもあるため、待ち時間が延長されることもある。待機中のスレッドは、ロックを保持しているスレッドがタイム・スライスを取り戻し、そのロックを含む危険域の処理を終えるまで、ロックを獲得しないこともある。
【００２４】
タスク実行モジュール２００には、カーネル２０５およびスレッド・ライブラリ２２５が含まれる。カーネル２０５には、スレッド・スケジューラ２１０が含まれる。スレッド・スケジューラ２１０は、各スレッドをスケジュールすることもできる。一部の実施形態では、カーネル２０５がカーネル・スレッドを作成することもあり、スレッド・スケジューラ２１０がそれらをスケジュールすることもある。別の実施形態では、ユーザ・スレッドがカーネル・スレッドにマッピングされることでスケジュールされることもある。
【００２５】
スレッド・スケジューラ２１０には、タイム・スライス・ディターミナ２１５および時間窓ディターミナ２２０が含まれる。タイム・スライス・ディターミナ２１５は、スレッドのタイム・スライスを決定することもある。スケジューリングの一形態では、スレッドには、プロセッサ上で実行するため、タイム・スライスすなわち一定時間が与えられる。タイム・スライスが満了すると、そのスレッドは、次のタイム・スライスがスケジュールされるまで、待ち状態に入れられる。一部の実施形態では、スレッドに優先順位が割り当てられても良い。高い優先順位を持つスレッドには、長いタイム・スライスが与えられていることもある。別の実施形態では、待機スレッドがキューに入れられることもある。スレッドは、初めは、短めのタイム・スライス有するキューに割り当てられることもある。スレッドが、数回のタイム・スライス後タスクを完了できなければ、長めのタイム・スライスを有するキューに割り当てられることもある。
【００２６】
時間窓ディターミナ２２０は、スレッドがいずれのロックも保持していないという前提で、ロック獲得が防止されるスレッドのタイム・スライス終了時点で終了する時間窓を決定することができる。一部の実施形態では、時間窓が、１０％などスレッドのタイム・スライスの一定の割合を含むこともある。たとえば、スレッドが１００ｍｓのタイム・スライスを割り振られる場合、時間窓ディターミナがタイム・スライスの最後の１０ｍｓの期間を割り当てても良い。いくつかの実施形態では、時間窓が８ｍｓなどの一定期間であることもある。一部の実施形態では、時間窓の長さが調節可能であることもある。システム・アドミニストレータが時間窓の期間を決定するパラメータを設定できることもある。いくつかの実施形態では、ロック・スーパバイザ２３５などのモジュールが、ロックの待ち時間を監視しても良く、かつ、ロックの待ち時間の延長という条件で時間窓を延長しても良い。反対に、ロック・スーパバイザ２３５が、ロックの待ち時間の短縮という条件で時間窓を短縮しても良い。別の一部の実施形態では、初期に調整が行われることもある。一度調整されると、時間窓のサイズは固定されたままになることもある。さらに別の実施形態では、時間窓のサイズが条件によって頻繁に修正されることもある。
【００２７】
スレッド・ライブラリ２２５には、ユーザ・スレッドの実行をサポートするルーチンが含まれても良い。スレッド・ライブラリ２２５には、スレッド・スーパバイザ２３０およびロック・スーパバイザ２３５が含まれる。スレッド・スーパバイザ２３０は、リソースの作成、削除、ユーザ・スレッドへの割り当てを管理することもできる。スレッド・スーパバイザ２３０は、ユーザ・スレッドをカーネル・スレッドにマッピングすることでその機能の一部を実行しても良い。これらのユーザ・スレッドは、カーネル２０５によりカーネル・スレッドへ与えられるリソースにアクセスしても良い。スレッド・スーパバイザ２３０には、タイム・スライス・スーパバイザ２４０が含まれる。タイム・スライス・スーパバイザ２４０は、スレッドのタイム・スライスを管理しても良い。タイム・スライス・スーパバイザ２４０は、カーネル２０５からスレッド用のタイム・スライスの割り当てを受けても良い。スレッドがタイム・スライスを使い切った場合、タイム・スライス・スーパバイザ２４０が、そのスレッドを待ち状態に入れても良い。さらに、一部の実施形態では、タイム・スライス・スーパバイザ２４０は、スレッドがロックを保持していない場合、タイム・スライスの満了時の時間窓中にそのスレッドがロックを獲得するのを防止するために、そのスレッドをタイムアウトすることもある。
【００２８】
ロック・スーパバイザ２３５は、スレッドに割り当てるロックを管理しても良い。ロック・スーパバイザ２３５には、時間窓モニタ２４５およびロック保持モニタ２５０が含まれる。時間窓モニタ２４５は、実行中のスレッドのタイム・スライスの終わりの時間窓を監視することもできる。時間窓モニタ２４５は、時間窓の開始、または、時間窓の開始を計算する元となるその他の情報を保持するために記憶スペースを予約しても良い。多くの実施形態では、その記憶スペースが、図１のＲＡＭ１０５などのＲＡＭ内のメモリであっても良い。他の実施形態では、その記憶スペースがレジスタ内のスペースであっても良い。スレッドが実行し始めると、時間窓モニタ２４５が開始時間などの情報を登録されたスペースに格納しても良い。ロック保持モニタ２５０が、スレッドに保持されているロック数を監視しても良い。
【００２９】
ロック・スーパバイザ２３５が、時間窓モニタ２４５およびロック保持モニタ２５０より提供されるデータを元にロックをスレッドに付与するかを決定しても良い。これによりロックがいずれのスレッドも保持していない場合、そのスレッドが時間窓内でロックを獲得することを防止できる。一部の実施形態では、ロック・スーパバイザ２３５が、スレッドのロック開放時にそのスレッドをチェックすることもある。スレッドが時間窓内にありいずれのロックも保持していない場合、ロック・スーパバイザ２３５が、そのスレッドをタイムアウトするため、スレッド・スーパバイザ２３０にメッセージを送信し、そのスレッドのタイム・スライスの残りについてそのスレッドがロックを獲得するのを防止しても良い。別の実施形態では、ロック・スーパバイザ２３５が、スレッドがいずれのロックも保持していない場合に、そのスレッドが時間窓内で出すロック要求を拒否しても良い。
【００３０】
図２は、図解目的であり、制限目的ではない。タイプ・アヘッド・モジュールの一部の実施形態では、図示されている機能のいくつかを省略することもあり、多くの実施形態では、追加機能が含まれることもある。同様に、タスク実行モジュールの他の実施形態では、モジュール間の機能の分け方が、図２で示される分け方と異なることもある。いくつかのモジュールの機能がひとつのモジュールに結合されることもあり、また、一つのモジュールの各機能がいくつかに分かれることもある。
【００３１】
図３は、ロックをスレッドに付与する方法の一実施形態のフローチャートである。本方法は、図２のタスク実行モジュール２００のような装置により実行されても良い。図３のフローチャート３００は、時間窓の開始を格納するために、スレッド・ライブラリがＲＡＭの領域を登録すること（エレメント３０５）から始まる。本方法には、スレッドのタイム・スライスの終わりに時間窓を設定すること（エレメント３１０）が含まれる。本方法にはまた、スレッドをスケジューリングすること（エレメント３１５）が含まれる。スレッドのスケジューリングは、そのスレッドがプロセッサの次のタイム・スライスを獲得した際に決定されても良い。タイム・スライスの予定されている終了と時間窓のサイズから、時間窓の開始が決定されても良い。カーネルがスレッド・ライブラリに時間窓の開始、または、開始を決定する元となり得るその他の情報を伝えても良い（エレメント３２０）。スレッド・ライブラリは、開始時間などの情報を、開始情報の格納のために登録されたＲＡＭの領域に格納しても良い（エレメント３２５）。
【００３２】
スレッドが他のロックを保持していないことを前提として、スレッドが時間窓中にロックを獲得することを防止するために、時間窓に関する情報が利用されても良い（エレメント３３５）。多くの実施形態では、スレッドのロック獲得防止には、そのスレッドがロックを開放済みであることの判断が含まれても良い（エレメント３４０）。図２のロック・スーパバイザ２３５などのモジュールが、スレッドによるロックの獲得と開放を監視しても良い。本方法には、スレッドが時間窓内にあることの判断が含まれても良い（エレメント３４５）。本方法にはまた、スレッドが他のロックを保持していないことの判断が含まれることもある（エレメント３５０）。上述の３判断に基づき、タイム・スライスの残りについては、スレッドがタイムアウトさせられても良い（エレメント３５５）。監視すべき他のスレッドがある場合には、エレメント３１０から３３５が繰り返されても良い（エレメント３６０）。それ以外の場合では、図３の方法が終了しても良い。
【００３３】
図３の方法は、制限目的ではなく例示目的で示されている。別の実施形態においては、各エレメントが、異なる順序で実行されても良く、追加のエレメントが実行されても良く、またはいくつかのエレメントが削除されても良い。一部の実施形態では、スレッドの時間窓の開始を格納するために、レジスタが使用されることもある。いくつかの実施形態では、スレッドが時間窓中に最後のロックを開放後も、実行し続けることが可能なこともある。一部の別の実施形態では、そうではなく、スレッドのロック・リクエストが確認されることもある。スレッドが時間窓中にリクエストを発行しいずれのロックも保持しなければ、そのリクエストは拒絶されることもある。一部の実施形態では、スレッド・スーパバイザが、スレッドが時間窓の開始時点でロックを保持しているかを確認することもある。そのスレッドがロックを保持していなければ、タイムアウトさせられることもある。
【００３４】
図３の一部の実施形態では、タイムアウトしてしまったスレッドに保持されているロックの待ち時間を削減することで、図１のアプリケーション・プログラム１２５のようなアプリケーションの実行時間を速めることもある。この待ち時間はかなり長いこともある。ロックにより保護されているデータへのアクセスを希望している別のスレッドは、そのスレッドが再びプロセッサを占有しそのロックを含む処理を完了するまで待たなければならないこともある。このスレッドは、いくつかの他のスレッドがそれぞれのタイム・スライスを使い切った後でのみタイム・スライスを再び獲得することが可能である。
【００３５】
これらの実施形態では、各スレッドがタイム・スライスの終わりの時間窓中にロックを獲得することを防止することで、それらのスレッドがロックを保持したままタイムアウトする可能性を削減することができる。これらの実施形態は、ロックを使い切るたびに再びロックを獲得することを繰り返すスレッドには特に有効である場合がある。たとえば、背景技術の欄に記載されているようなウィズドロウアル・スレッドは、銀行口座のロックを繰り返し獲得し、口座情報を更新してからロックを開放することもできる。こうしたスレッドが時間窓中にロックを開放すると、その後まもなく別のロックを獲得するが、タイムアウトする前に処理を終えることができない場合もある。図３の方法では、こうしたスレッドがロックを獲得する可能性もなく、他のスレッドを遅らせることもないであろう。本発明の一部の実施形態は、ロックの競合を削減することが可能だが、これは、本発明の制限ではない。本発明の他の実施形態では、当業者が思いつく別の目的のロックの時間窓が使用されることもある。
【００３６】
図４は、エレメント３３５の詳細を表す例示的タイム・チャート４００である。図４のタイム・チャートでは、スレッドＡおよびスレッドＢ、２つの実行中のスレッドを示す時系列４０２が示されている。図４の例では、各スレッドのタイム・スライスが時間４０５で始まり、各スレッドの時間窓が時間４１５で始まり、通常の予定でいけばタイム・スライスは時間４２５で終了する。時間４１０で、スレッドＢはロックを開放する（エレメント４４５）。この開放は、スレッドＢの時間窓の（開始）時間４１５の前である。したがって、この場合、スレッドＢはタイム・スライスの残りについても実行し続ける。反対に、スレッドＡは、時間窓内の時間４２０でロックを開放する（エレメント４４０）。図４の例では、スレッドＡはロック開放後、いずれのロックも保持できない。スレッドＡは、その結果タイムアウトさせられる。タイム・スライス内のスレッドＡの実行は時間４２０で終了する。
【００３７】
図５のＡおよび図５のＢを参照すると、本発明の一実施形態におけるロック待ち時間削減の仮想例を示す時系列の例が示されている。図５のＡおよび図５のＢでは、同一スレッドを異なる動作環境下で検証する。図５のＡは、スレッドのロック獲得を防止する目的で時間窓が使用されない環境におけるスレッドの動作を表し、図５のＢは本発明の一実施形態によりロックを割り当てる方法を例示している。図５のＡおよび図５のＢには、５つのスレッド（Ｔ１、Ｔ２、Ｔ３、Ｔ４およびＴ５）のタイム・スライスに関連するイベントのタイミングを示す時系列（５０１、５２０および５５２）が含まれる。
【００３８】
図５のＡでは、時間５０３は、図５のＢにおけるスレッドＴ１の時間窓の開始時間５５３に相当する。しかし図５のＡでは、時間窓は使用されない。時間５０６で、スレッドＴ１は、ロックを獲得することが可能である。図５のＡの例では、スレッドＴ１は、他のロックを保持していない。スレッドＴ１のタイム・スライスは、スレッドＴ１がロックを保持している状態のままで終了する。時間５０９、５１２、５１５、および５１８では、スレッドＴ２、Ｔ３、Ｔ４およびＴ５がロックをリクエストするが、そのリクエストは、スレッドＴ１がロックを保持中のため拒絶される。
【００３９】
図５のＡの時系列５２０は、時系列５０１の続きである。時系列５０１は、スレッドＴ１がタイム・スライス内で再び実行可能になるところから始まる。時間５２１で、スレッドＴ１は、ロックにより保護されたデータを含む処理を完了しそのロックを開放する。続いて、スレッドＴ２、Ｔ３、Ｔ４およびＴ５がタイム・スライスを獲得し実行可能となり、時間５２７、５３０、５３３および５３６でロックの所有権を得る。各スレッドは、ロックで保護されたデータに関する処理を完了し、かつ、タイム・スライス中の時間５２８、５３１、５３４および５３７それぞれでロックを開放する。図５のＡの例では、スレッドＴ１のタイム・スライス終了直前のロック取得により、スレッドＴ２、Ｔ３、Ｔ４およびＴ５が遅延させられた。各スレッドは、スレッドＴ１がタイム・スライスを獲得し処理を完了するまで、各自のタスクを実行できなかった。
【００４０】
図５のＢでは、時系列５５２が時系列５０１同様に始まる。スレッドＴ１はタイム・スライスを開始し、時間５５３で時間窓が始まる。図５のＡの時間５０６に相当する時間５５６で、スレッドＴ１は、いずれのロックも保持していないので、ロックをリクエストする。しかし図５のＢの例では、そのリクエストは拒絶され、スレッドＴ１はロックを保持しない。結果として、スレッドＴ２、Ｔ３、Ｔ４およびＴ５は、時間５５９、５６２、５６５、５６８それぞれでロックを獲得することが可能である。これらの時間は、図５のＡの時系列５０１の時間５０９、５１２、５１５および５１８に相当する。各スレッドは、タイム・スライス内でロックにより保護されたデータの処理を完了し、タイム・スライス中の時間５６０、５６３、５６６および５６９でそのロックを開放する。結果として、図５Ｂでは、ひとつのスレッド、スレッドＴ１のみが、必要なロックを所有していないために処理の遅延を経験する。さらに、この遅延は短期間であることもある。図５のＡで見られるとおり、この様な状況下では、スレッドＴ１は、進行中のタイム・スライスではロックを含む処理を完了することができないこともあり、次のタイム・スライスまで待たなければならないこともある。
【００４１】
当業者に理解されるように、本発明は、システム、方法または、コンピュータ・プログラムとして具現化することもできる。したがって、本発明は、完全なハードウェア様態、完全なソフトウェア様態（ファームウェア、常駐ソフト、マイクロコードなどを含む）、または、本明細書において一般に「回路」、「モジュール」または「システム」と称されることもあるすべてのソフトウェアおよびハードウェア様態を結合した実施様態の形式をとっても良い。さらに、本発明は、コンピュータ使用可能プログラム・コードを収録した、いかなる有形記憶媒体内で具現化されるコンピュータ・プログラムの形式をとっても良い。
【００４２】
１つ以上のコンピュータ使用可能、またはコンピュータ可読媒体（単数または複数）の組み合わせならどのようなものでも利用可能である。このコンピュータ使用可能、またはコンピュータ可読媒体は、たとえば、限定するわけではないが、電子、磁気、光学、電磁気、赤外線、もしくは半導体のシステム、装置、デバイス、または伝搬メディアであっても良い。このコンピュータ可読媒体のより具体的な例（非網羅的なリスト）には、１本以上の電線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＲＡＭ）、読み出し専用メモリ（ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ：ＲＯＭ）、消去及びプログラム可能読取り専用記憶装置（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ：ＥＰＲＯＭ、またはフラッシュ・メモリ）、光ファイバ、携帯型再生専用光ディクス（ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ：ＣＤ-ＲＯＭ）、光学記憶デバイス、インターネットもしくはイントラネットをサポートするような送信媒体、または、磁気記憶デバイスも含まれる。プログラムを、たとえば、用紙などの媒体を光学的読み取って電子的に取り込んだ後にコンパイル、解釈、または必要ならば別の適した方法で処理し、コンピュータ・メモリ内に格納することが可能なので、このコンピュータ使用可能もしくはコンピュータ可読媒体は、用紙またはプログラムを焼き付けるのに適した他の媒体であっても良いことに留意されたい。本明細書の文脈では、コンピュータ使用可能、またはコンピュータ可読媒体は、命令実行システム、装置もしくはデバイスによる使用のため、またはそれらとの接続でプログラムを収録、格納、通信、伝搬または搬送することが可能な媒体ならいかなるものであっても良い。コンピュータ利用可能媒体には、コンピュータ使用可能プログラム・コードがベースバンド方式で組み込まれるか、または、搬送波の一部として組み込まれた伝搬データ信号が含まれることもある。このコンピュータ使用可能プログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなどを含むがこれに限定されない適切な媒体ならどのようなものを用いて送信されても良い。
【００４３】
本発明の動作を実行するコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、ＳｍａｌｌＴａｌｋ（Ｒ）、Ｃ＋＋、その他などのオブジェクト志向プログラミング言語、および「Ｃ」プログラミング言語、または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１言語以上のプログラミング言語のいかなる組み合わせで記述されても良い。このプログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、単独のソフトウェア・パッケージとして、一部がユーザのコンピュータ上で一部がリモート・コンピュータ上で、または完全にリモート・コンピュータ上もしくはサーバ上で実行されても良い。後半部分に関しては、そのリモート・コンピュータが、ローカル・エリア・ネットワーク（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＬＡＮ）もしくはワイド・エリア・ネットワーク（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＷＡＮ）を含むいずれの種類のネットワークを介してユーザのコンピュータに接続されても良く、さらには、そのような接続が、（たとえば、インターネット・サービス・プロバイダを使用しインターネット介して）外部のコンピュータと確立されても良い。
【００４４】
本発明は、フローチャートまたは本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラムのブロック図、あるいはそれらすべてを参照して上述されている。フローチャートまたはブロック図、あるいはその両方の各ブロック、およびフローチャートまたはブロック図、あるいはその両方のブロックの組み合わせが、コンピュータ・プログラム命令により実行可能であることが理解されよう。こうしたコンピュータ・プログラム命令が、汎用コンピュータ、専用コンピュータ、または機械を生産するための別のプログラム可能なデータ処理装置のプロセッサに提供され、その結果、そうしたコンピュータなどのプログラム可能データ処理装置のプロセッサを介して実行される命令が、そのフローチャートまたはブロック図、あるいはその両方のブロックにおいて特定される機能／動作を実行する手段を創出するようにしても良い。
【００４５】
これらのコンピュータ・プログラム命令はまた、コンピュータなどのプログラム可能なデータ処理装置に独自の方法で機能するよう指示することが可能なコンピュータ可読媒体に格納されることもあり、このため、そのコンピュータ可読媒体に格納された命令が、フローチャートまたはブロック図、あるいはその両方のブロックで指定された機能／動作を実行する命令手段を備える製品を産み出す。
【００４６】
また、このコンピュータ・プログラム命令を、コンピュータまたはその他のプログラム可能なデータ処理装置に読み込み、一連の動作ステップをこのコンピュータもしくは別のプログラム可能な装置上で実行させ、コンピュータ実行型プロセスを作り出すようにして、そのコンピュータまたはその他のプログラム可能な装置で実行するこの命令が、フローチャートまたはブロック図、あるいはその両方のブロックで指定される機能／動作を実行するプロセスを提供しても良い。
【００４７】
添付図面のフローチャートおよびブロック図は、本発明の種々の実施形態によるシステム、方法、およびコンピュータ・プログラムの可能な実装のアーキテクチャ、機能性、および動作を例示している。これに関しては、フローチャートまたはブロック図の各ブロックは、モジュール、セグメントまたは指定された論理関数（単数または複数）を実行するための１つ以上の実行可能な命令を含むコードの一部を表しても良い。代替の実装の中には、ブロック内に記載された機能が図面に記載された順序に反して行われることがあることも理解されよう。たとえば、連続した２つのブロックが、実際には、ほぼ同時に実行されることもあり、または、それらのブロックが、時には、含まれる機能により、逆の順序で実行されることもある。ブロック図またはフローチャート、あるいはその両方の各ブロック、およびブロック図またはフローチャート、あるいはその両方のブロックの組み合わせが、指定された機能もしくは動作を実行する専用ハードウェア・ベースのシステム、または専用ハードウェアおよびコンピュータ命令の組み合わせにより実施できることも理解されよう。
【００４８】
プログラム・コードの格納または実行、あるいはその両方に適したデータ処理システムには、システム・バスを介して直接または間接的にメモリ要素に接続される少なくとも１つのプロセッサが含まれる。このメモリ要素には、そのプログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量記憶装置および実行中に大容量記憶装置からコードを呼び出さなければならない回数を削減するために、少なくともいくつかのプログラム・コードの一時的な記憶場所を提供するキャシュ・メモリを含めることが可能である。
【００４９】
入出力すなわちＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがそれに限定されない）は、システムに直接、または図示しないＩ／Ｏコントローラを介して接続することが可能である。
【００５０】
また、データ処理システムを他のデータ処理システム、リモート・プリンタあるいは記憶デバイスに、図示しない私設あるいは公衆網を介して接続できるようにするため、ネットワーク・アダプタをシステムに接続しても良い。モデム、ケーブル・モデムおよびイーサネット・カードが現在唯一利用可能な種類のネットワーク・アダプタである。
【００５１】
本開示の利益を得る当業者には、本発明が、ロックのスレッドへの割り当て方法および処理を検討していることが明らかになろう。詳細な説明を持って説明される本発明の形態および添付図面は、例示目的としてだけ取り上げられることが理解されるであろう。以下の特許請求項は、開示される例示的実施形態の全変形様態を含むよう広く解釈されるものとする。
【００５２】
本発明およびその利点の一部が、いくつかの実施形態において詳細に説明されてきたが、添付の特許請求項により定義されるように、本発明の精神および範囲から逸脱することなく種々の変更、置換および変形を本明細書において加えることが可能であることが理解されよう。本発明の一実施形態が、複数の目的を達成することもあるが、添付の特許請求項の範囲内の全ての実施形態が全ての目的を達成するわけではない。さらに、本出願の範囲は、本明細書で説明されるプロセス、機械、製造物、合成物、手段、方法およびステップの特定の実施形態に限定されるものではない。当業者なら本発明の開示から容易に理解するように、現在存在している、もしくは今後開発される、ほぼ同様の機能を実行し、または本明細書で説明される該当実施形態とほぼ同一の結果を達成するプロセス、機械、製造物、合成物、手段、方法あるいはステップが、本発明に従い利用されても良い。したがって、添付の特許請求項は、そのようなプロセス、機械、製造物、合成物、手段、方法またはステップをその範囲に包含するものである。
【符号の説明】
【００５３】
３０５：スレッド・ライブラリが時間窓の開始を格納するためにＲＡＭの領域を登録
３１０：スレッドのタイム・スライスの終わりに時間窓を設定
３１５：スレッドをスケジューリング
３２０：時間窓の開始をカーネルからスレッド・ライブラリへ伝える
３２５：スレッドのスケジュールに基づき時間窓の開始をＲＡＭの領域に格納
３３５：時間窓中にスレッドがロックを獲得する事を防止
３４０：スレッドがロックを開放済みである事を判断
３４５：スレッドが時間窓内である事を判断
３５０：スレッドが他のロックを保持していない事を判断
３５５：スレッドのタイム・スライスの残りについてスレッドをタイムアウト
３６０：他のスレッドは？
【図１】
2010020759.tif 000003
【図２】
2010020759.tif 000004
【図３】
2010020759.tif 000005
【図４】
2010020759.tif 000006
【図５】
2010020759.tif 000007