(57)【特許請求の範囲】
【請求項１】
第１のルーチンから第２のルーチンが呼び出される呼出階層において、前記第１のルーチン及び第２のルーチンに関連する第１のデータと、前記第２のルーチンに関連する第２のデータと、の両方を保護する方法であって、
前記第１のルーチンは、前記第１のデータを保護するために第１のデータに関連するロックオブジェクトをロックする工程と、
前記第２のルーチンは、前記第２のデータを保護するために第２のデータに関連するロックオブジェクトを再ロックする工程と、
を含んで構成されることを特徴とする方法。
【請求項２】
前記第１のルーチンに関連するオブジェクトを前記第１のデータに関連するロックオブジェクトに選定する工程をさらに含む構成である請求項１記載の方法。
【請求項３】
前記第２のルーチンに関連するオブジェクトを前記第２のデータに関連するロックオブジェクトに選定する工程をさらに含む構成である請求項１記載の方法。
【請求項４】
第３のルーチンがロックオブジェクトパラメータを前記第２のルーチンに提供する工程と、
前記ロックオブジェクトパラメータがロックオブジェクトを特定する場合に、前記第２のルーチンが前記ロックオブジェクトパラメータにより特定された前記ロックオブジェクトをロックする工程と、
前記ロックオブジェクトパラメータがオブジェクロッキングが実行されないことを特定する場合に、前記第２のルーチンがロックオブジェクトをロックしない工程と、
をさらに含む構成である請求項１記載の方法。
【請求項５】
前記第１のルーチンは、第１のオブジェクトに関連する第１の手順であり、
前記第２のルーチンは、第２のオブジェクトに関連する第２の手順であり、
前記第１のルーチンが前記第１のデータに関連するロックオブジェクトをロックする工程は、前記第１の手順が前記第１のデータを保護するために第１のデータに関連するロックオブジェクトをロックする工程をさらに含み、
前記第２のルーチンが前記第２のデータに関連するロックオブジェクトを再ロックする工程は、前記第２の手順が前記第２のデータを保護するために第２のデータに関連するロックオブジェクトを再ロックする工程をさらに含む
構成である請求項１記載の方法。
【請求項６】
前記第１の手順に関連するオブジェクトを前記第１のデータに関連するロックオブジェクトに選定する工程をさらに含む構成である請求項５記載の方法。
【請求項７】
前記第２の手順に関連するオブジェクトを前記第２のデータに関連するロックオブジェクトに選定する工程をさらに含む構成である請求項５記載の方法。
【請求項８】
第１のルーチンから第２のルーチンが呼び出される呼出階層において、前記第１のルーチン及び第２のルーチンに関連する第１のデータと、前記第２のルーチンに関連する第２のデータと、を保護するメモリを備えたコンピュータシステムであって、
前記メモリは、
前記第１のルーチンと、
前記第１のデータと、
前記第２のルーチンと、
前記第２のデータと、
前記第１のデータを保護するために前記第１のルーチンによりロックされる第１のデータに関連するロックオブジェクトと、
前記第１のデータを保護するために第１のデータに関連するロックオブジェクトがロックされる間、前記第２のデータを保護するために前記第２のルーチンにより再ロックされる第２のデータに関連するロックオブジェクトと、
を含んで構成されることを特徴とするコンピュータシステム。
【請求項９】
第１のルーチンから第２のルーチンが呼び出される呼出階層において、前記第１のルーチン及び第２のルーチンに関連する第１のデータと、前記第２のルーチンに関連する第２のデータと、の両方を保護する複数の一連の命令を記憶したコンピュータ読み取り可能な媒体であって、
一連の命令を含む前記複数の一連の命令は、コンピュータに、
前記第１のデータを保護するために前記第１のルーチンが第１のデータに関連するロックオブジェクトをロックする工程と、
前記第２のデータを保護するために前記第２のルーチンが第２のデータに関連するロックオブジェクトを再ロックする工程と、
を実行させる構成であることを特徴とするコンピュータ読み取り可能な媒体。
【請求項１０】
前記コンピュータ読み取り可能な媒体は、前記コンピュータに、前記第１のルーチンに関連するオブジェクトを前記第１のデータに関連するロックオブジェクトに選定する工程を実行させる命令をさらに含む構成である請求項９記載のコンピュータ読み取り可能な媒体。
【請求項１１】
前記コンピュータ読み取り可能な媒体は、前記コンピュータに、前記第２のルーチンに関連するオブジェクトを前記第２のデータに関連するロックオブジェクトに選定する工程を実行させる命令をさらに含む構成である請求項９記載のコンピュータ読み取り可能な媒体。
【請求項１２】
前記コンピュータ読み取り可能な媒体は、
前記コンピュータに、
第３のルーチンがロックオブジェクトパラメータを前記第２のルーチンに提供する工程を実行させる命令と、
前記ロックオブジェクトパラメータがロックオブジェクトを特定する場合に、前記第２のルーチンが前記ロックオブジェクトパラメータにより特定された前記ロックオブジェクトをロックする工程を実行させる命令と、
前記ロックオブジェクトパラメータがオブジェクトロッキングが実行されないことを特定する場合に、前記第２のルーチンがロックオブジェクトをロックしない工程を実行させる命令と、
をさらに含んだ構成である請求項９記載のコンピュータ読み取り可能な媒体。
【請求項１３】
前記第１のルーチンは、第１のオブジェクトに関連する第１の手順であり、
前記第２のルーチンは、第２のオブジェクトに関連する第２の手順であり、
前記第１のルーチンが第１のデータに関連するロックオブジェクトをロックする工程は、前記第１の手順が前記第１のデータを保護するために第１のデータに関連するロックオブジェクトをロックする工程をさらに含み、
前記第２のルーチンが第２のデータに関連するロックオブジェクトを再ロックする工程は、前記第２の手順が前記第２のデータを保護するために第２のデータに関連するロックオブジェクトを再ロックする工程をさらに含む
構成である請求項９記載のコンピュータ読み取り可能な媒体。
【請求項１４】
前記コンピュータ読み取り可能な媒体は、前記コンピュータに、前記第１の手順に関連するオブジェクトを前記第１のデータに関連するロックオブジェクトに選定する工程を実行させる命令をさらに含む構成である請求項１３記載のコンピュータ読み取り可能な媒体。
【請求項１５】
前記コンピュータ読み取り可能な媒体は、前記コンピュータに、前記第２の手順に関連するオブジェクトを前記第２のデータに関連するロックオブジェクトに選定する工程を実行させる命令をさらに含む構成である請求項１３記載のコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マルチスレッドコンピューティング環境に関し、より具体的には、選択的なオブジェクトロッキングによりスレッドを同期する方法及び装置に関する。
【０００２】
【従来の技術】
マルチスレッドコンピューティング環境は、スレッドとして知られているプログラムの異なった部分を同時に実行することを可能にする。近年では、マルチスレッドコンピューティング環境は、マルチスレッドアプリケーションによって提供される好都合な動作特性のために、より普及するようになった。
【０００３】
マルチプロセシング環境におけるプロセス実行を比較すると、セーブ及びリストアするランタイム状態がより少ないので、スレッドの実行は、とても迅速に開始されかつ終了される。スレッド間を迅速に切り替えることができる特性は、比較的高水準のデータ一致性を提供することができる。マルチスレッド環境においては、データの一致性は、多数のスレッドが同時に同一データにアクセスできる能力に相当する。マルチスレッド環境がマルチプロセッサシステムのときには、各スレッドが別々のプロセッサで実行され、多数のスレッドが共有データに同時にアクセスすることを可能にする。
【０００４】
【発明が解決しようとする課題】
マルチスレッドコンピューティング環境によって好都合な動作特性が提供されるにもかかわらず、マルチスレッドコンピューティング環境には、欠点がないわけではない。具体的に言うと、マルチスレッドアプリケーションでは、複数のスレッドが同時に同一データにアクセスできるので、データ構造及び変数の完全な状態を維持することは、特に興味深いものである。マルチプロセシング環境におけるプロセスとは違って、スレッドは、一般に、単一のアドレス空間及び一組の広域変数を共有し、主として、プログラムカウンタ及びスタックポインタの値により識別される。従って、何らかの共通にアクセス可能なデータの状態は、他のスレッドによって読まれているのと同時に、１つのスレッドによる変化を受けるので、データを信頼できないものにする。
【０００５】
多数のスレッドによる共通データへのアクセスを制御するために、あるシステムは、スレッドによる共通データへのアクセスを同期し、かつ、シリアライズする。マルチスレッド環境においては、スレッドを同期することは、共通データ構造へのアクセスを制御する機構を使用することに相当する。そのため、１つのスレッドだけが、一定の時間に共通データ構造にアクセスすることができる。一般に、共通データにアクセスする多数の要請は待ち行列に入り、オペレーティングシステム、マルチスレッドシステム、或いは、他の機構のどちらか一方により、一度に１つ処理される。
【０００６】
スレッドを同期するために、あるプログラミング言語は、「モニタ」として知られているプログラミング言語構造を含んでいる。モニタは、抽象的なデータ形式内への、変数，手順及び他のデータ形式のカプセル化を提供する。モニタの変数，手順及び他のデータは、単一のアクセス手続によってのみアクセスされる。これは、他のアクセス要請がその順番になるまで待ち行列に入ったままで、１つのスレッドだけがいつでもモニタを積極的にアクセスすることを保証する。他のプログラミング言語は、スレッドによって実行されたときに、コードのブロックを効率的にロックする「同期された」ステートメントを支援して、同期されたステートメントを実行したスレッドだけが、コードのロックされたブロックを実行することができるようにする。共通データに影響を及ぼすコードは、その後、１つのスレッドだけがある一定の時間に共通データにアクセスできるように、コードの同期されたブロックに置かれる。
【０００７】
オブジェクト指向環境では、スレッド同期は、オブジェクトロッキングによって時には成し遂げられる。一般に、オブジェクトロッキングは、オブジェクトに関連するロッキングデータを必要とするため、オブジェクトに関連する手順を呼び出したスレッドだけが、オブジェクトに関連するデータに変化を与える。オブジェクト指向言語の固有の再利用性のため、ソフトウエアデベロッパは、大規模な再利用可能なオブジェクトクラスライブラリを構築するのが普通である。ライブラリデベロッパは、常に、オブジェクトクラスライブラリがどのように使用されるか前もってわかるとは限らないので、オブジェクトロッキングは、一般に、ライブラリの全てのオブジェクトに対し実行される。
【０００８】
オブジェクトロッキングは、複数のスレッドが同時にデータをアクセスしないようにするが、ある状況下では、オブジェクトロッキングは不要である。例えば、あるアプリケーションは、単一のスレッドのみを使用して、複数のスレッドが同時にオブジェクトデータにアクセスする心配を排除する。マルチスレッドアプリケーションですら、たびたび、データは、オペレーティングシステムにより、或いは、マルチスレッド環境によるより高水準で提供されるスレッド安全機構で保護される。かかる状況の両者では、オブジェクト呼出階層におけるオブジェクトはロックされる必要がない。従って、ロック関連オペレーションの自動実行の間に消費される時間及びシステムリソースは無駄になる。
【０００９】
呼び出されたオブジェクトは、それ自体が他のオブジェクトを呼び出す他のオブジェクトを呼び出すので、高水準オブジェクトを呼び出すことにより、多数のオブジェクトをロックさせることとなる。呼出階層の深さには理論上の限界がない。従って、ロッキングオペレーションが不要なとき、組み込まれたロックオペレーションによって無駄にされる時間には限界がない。オブジェクトをロックすることは、かなりのシステムリソース及び時間を必要とする。例えば、あるシステムでは、オブジェクト上でロックを得ることは、最初のロックがロックテーブル上で得られ、そして、ロックテーブルエントリがロックを得るべきスレッドに関する情報に基づいて構成されることを必要とする。
【００１０】
図１に図示されたオブジェクト呼出階層１００を検討する。動的な呼出階層１００は、オブジェクトＡ１０２，オブジェクトＢ１０４及びオブジェクトＣ１０６を含む。オブジェクトＡ１０２は、オブジェクトＡ１０２に関連する変数及びデータ構造等のデータ１０８を含む。オブジェクトＡ１０２はまた、データ１０８に作用する手順１１０を含む。同様に、オブジェクトＢ１０４は、オブジェクトＢ１０４に関連する変数及びデータ構造等のデータ１１２を含む。オブジェクトＢ１０４はまた、データ１１２に作用する手順１１４を含む。最後に、オブジェクトＡ１０２及びオブジェクトＢ１０４と同様に、オブジェクトＣ１０６は、オブジェクトＣ１０６に関連する変数及びデータ構造等のデータ１１６を含む。オブジェクトＣ１０６はまた、データ１１６に作用する手順１１８を含む。
【００１１】
図１のオブジェクト呼出階層１００により図示されるように、オブジェクトＡ１０２の手順１１０を呼び出すことにより、オブジェクトＢ１０４の手順１１４が呼び出され、次に、オブジェクトＣ１０６の手順１１８が呼び出される。
マルチスレッド環境では、複数のスレッド（図示せず）は、夫々、オブジェクトＡ１０２，Ｂ１０４，Ｃ１０６に関連する手順１１０，１１４，１１８を呼び出す。さらに、かかるスレッドが非同期であれば、データ１０８，１１２，１１６は、複数のスレッドにより更新され、データ１０８，１１２，１１６が信頼できないものとなる。
【００１２】
一般的な同期アプローチによれば、手順１００が呼び出されたとき、コード１２０の実行により、データ１０８に含まれるロックオブジェクトＡ１２２上でロックが得られる。ロックオブジェクトＡ１２２がロックされると、ロックオブジェクトＡ１２２を保持するスレッドだけが、データ１０８に変更をもたらす。特に、手順１１０はまた、データ１０８に含まれるデータＡ１２４にアクセスするコード１２３を含むので、ロックオブジェクトＡ１２２を保持するスレッドだけが、コード１２３を実行させ、かつ、データＡ１２４に変更をもたらす。
【００１３】
また、手順１１０を呼び出すことにより、オブジェクトＢ１０４の手順１１４を呼び出すコード１２５が実行される。手順１１４を呼び出すことにより、コード１２８の実行によりロックオブジェクトＢ１２６上でロックが得られる。そして、コード１３０の実行により、オブジェクトＣ１０６の手順１１８が呼び出される。そして、コード１３４の実行により、ロックオブジェクトＣ１３２上でロックが得られる。
【００１４】
手順１１８は、データ１１６のデータＣ１３６にアクセスするコード１３５を含む。手順１１８はまた、ロックオブジェクトＣ１３２上でロックを解放させるコード１３７を含む。制御はその後手順１１４へと戻り、ここで、コード１３８は、データ１１２のデータＢ１３９にアクセスする。そして、ロックオブジェクトＢ１２６上のロックは、コード１４０の実行によって解放され、制御は手順１１０へと戻る。最後に、コード１４２の実行により、ロックオブジェクトＡ１２２上のロックが解放される。
【００１５】
組み込まれたロッキングコード１２０，１４２，１２８，１４０，１３４，１３７は、１つのスレッドだけが何らかの一定時間にデータ１０８，１１２，１１６にアクセスすることを保証するが、３つのロックオペレーション及び３つのアンロックオペレーションを必要とする。ある状態では、３つのロックオブジェクト１２２，１２６，１３２を全てロック及びアンロックすることは必要ない。例えば、単一のスレッドアプリケーションは、オブジェクトＡ１０２，Ｂ１０４，Ｃ１０６を呼び出し、これは、当然、単一のスレッドだけがデータ１０８，１１２，１１６を変更させることを意味する。しかしながら、オブジェクト呼出階層でオブジェクトに関連する手順を呼び出すことにより、自動的に、他の呼び出されたオブジェクト全てのためにロックが得られる。これは、特に、多くの水準を含む呼出階層にとっては、かなりのシステムリソースを使用することとなる。
【００１６】
従って、シングルスレッド及びマルチスレッド環境で、オブジェクトに関連するデータを保護する必要性、及び、従来アプローチでの限界を考慮して、システムリソースに置かれた負荷を減らすマルチスレッド環境において、スレッドを同期するアプローチが大いに所望されている。
【００１７】
【課題を解決するための手段】
本発明の一様相によれば、第１のルーチンに関連する第１のデータと、第２のルーチンに関連する第２のデータと、の両方を保護するための方法が提供される。第１のルーチンにより、ロックオブジェクトが第１のデータを保護するためにロックされる。そして、第２のルーチンにより、ロックオブジェクトが第１のデータを保護するためにロックされている間、同一のロックオブジェクトが第２のデータを保護するために再ロックされる。
【００１９】
本発明の他の様相によれば、第１のルーチンに関連する第１のデータと、第２のルーチンに関連する第２のデータと、を保護するためのメモリを備えたコンピュータシステムが提供される。メモリは、第１のルーチン、第１のデータ、第２のルーチン、第２のデータ及びロックオブジェクトを含む。ロックオブジェクトは、第１のデータを保護するための第１のルーチンによってロックされ、また、第１のデータを保護するための第１のルーチンによってロックされている間、第２のデータを保護するための第２のルーチンによって再ロックされる。
【００２１】
【発明の実施の形態】
本発明は、実施形態を通して説明されるが、添付図面の形態に限定されるものではない。図中、同様の要素には同様の参照符号が付される。
選択的なオブジェクトロッキングを使用してスレッドを同期する方法及び装置を説明する。以下の記述では、説明の便宜のために、本発明を完全に理解するための具体的な詳細が開示される。しかしながら、本発明は、かかる具体的な詳細なしに実行できることは明らかである。他の例では、本発明を不必要に不明瞭にすることを回避するため、公知の構造及び装置がブロック図で示される。
機能の概要
選択的なオブジェクトロッキングを使用したスレッドを同期する方法及び装置を説明する。選択的なオブジェクトロッキングは、オブジェクトを同期するために使用されるロックオブジェクトを選定するスレッドの能力に相当する。
【００２２】
本発明の一実施形態によれば、呼出スレッドは、スレッドがオブジェクトを作成するコンストラクタ手順を呼び出すときに、ロックオブジェクトをオブジェクトに選定する。スレッドによって選定されるロックオブジェクトは、どんなオブジェクトであってもよい。同一のロックオブジェクトは、選定されたロックオブジェクトが再利用されるように、呼出スレッドによって呼び出されるオブジェクト呼出階層において、他のオブジェクトに選定されてもよい。オブジェクトに関連するデータを保護するために使用されるロックオブジェクトを特定する能力によって、スレッドによって呼び出される一連のオブジェクトが同一のロックオブジェクトを使用できる。
【００２３】
再ロックオペレーションを行うのに必要なシステムリソース及び時間は、ロックオペレーションを行うのに必要なシステムリソース及び時間より少ないので、このアプローチは、オブジェクトロッキングに起因するシステムオーバヘッドをかなり減少する。
以下の記述において、用語「オブジェクトを呼び出すこと」とは、オブジェクトに関連する手順を呼び出すことをいう。また、用語「オブジェクトをロックすること」とは、オブジェクトに関連するデータへのアクセスを制限するために、ロックオブジェクト上でロックを得ることをいい、ここで、データを含むオブジェクトは、ロックオブジェクトと同一のオブジェクトであってもよく、また、同一のオブジェクトでなくともよい。本発明の実施形態は、オブジェクト呼出階層に関しては後述されるけれども、本発明は、特定のルーチンの形式或いは実施にかかわらず、どんなタイプのルーチン呼出階層にも適用され得る。
詳細な説明
本発明の一実施形態による選択的なオブジェクトロッキングを使用したスレッドを同期する方法及び装置は、(1) ボトムアップアプローチ、(2) トップダウンアプローチ、(3) 任意のロッキングアプローチを含む３つのアプローチに関して、後述される。
１．ボトムアップアプローチ
一般に、ボトムアップアプローチによれば、オブジェクト呼出階層の下位のオブジェクトに関連するロックオブジェクトは、ロックオブジェクトとして呼出スレッドによって選定される。このアプローチは、下位レベルのオブジェクトが先ず作成され、下位レベルのオブジェクトの同一性が１つ以上のより上位レベルのオブジェクトに提供されて、かかる上位レベルのオブジェクトが、呼び出したオブジェクトのためのロックオブジェクトとして下位レベルのオブジェクトを後で特定することができるので、ボトムアップアプローチと呼ばれる。ロックオブジェクトを選定した後で、呼出スレッドは、呼出スレッドによって呼び出される任意の他のオブジェクトのコンストラクタ手順に対して選定されたロックオブジェクトの同一性を提供する。かかるオブジェクトに関する各同期手順は、その後、それ自体のロックオブジェクトの代わりに、選定されたロックオブジェクト上でロックを得る。本質的に、一定のスレッドに関連するオブジェクト呼出階層でオブジェクトのいくつかは、構築されたときに特定された選定されたロックオブジェクト上でロックを得る。最初のロックの後に、選定されたロックオブジェクト上で得られた全てのロックは、再ロックオペレーションである。再ロックオペレーションは、ロックオペレーションより少ないシステムリソースを必要としかつ速い。
【００２４】
ボトムアップアプローチは、デベロッパが多くの階層で組み立てられるオブジェクトクラス及びデータ構造のライブラリを構築している状態で、特に有用である。即ち、多くの設計者は、簡単なオブジェクトクラスから開始して、上位レベルのオブジェクトクラスを構築し、その手順は、より基本的なオブジェクトクラスの手順を呼び出すものである。設計者は、全オブジェクトクラスのうち最上位或いは最外側の層が何であるかがいつもわかるわけではないので、設計者は、ボトムアップアプローチに従って、選定されたロックオブジェクトとして呼出階層で下位オブジェクトに関連するロックオブジェクトを選択する。呼出連鎖における下位オブジェクトに関連するロックオブジェクトは、通常ロックオブジェクトとして選定されるが、オブジェクト呼出階層における任意のオブジェクトに関連するロックオブジェクトが、ロックオブジェクトとして選定されてもよい。
【００２５】
本発明の一実施形態による明白なオブジェクトロッキングを提供するボトムアップアプローチは、図２を参照して以下に述べられる。オブジェクト呼出階層２００は、図１の動的呼出階層１００と同様であり、オブジェクトＡ２０２，オブジェクトＢ２０４及びオブジェクトＣ２０６を含んでいる。オブジェクトＡ２０２は、オブジェクトＡ２０２に関連する変数及びデータ構造等のデータ２０８を含む。データ２０８は、オブジェクトＡ２０２に関連するロックオブジェクトＡ２０９を含む。オブジェクトＡ２０２はまた、データ２０８に作用する手順２１０を含む。
【００２６】
オブジェクトＢ２０４は、オブジェクトＢ２０４に関連する変数及びデータ構造等のデータ２１２を含む。データ２１２は、オブジェクトＢ２０４に関連するロックオブジェクトＢ２１３を含む。オブジェクトＢ２０４はまた、データ２１２に作用する手順２１４を含む。
オブジェクトＣ２０６は、オブジェクトＣ２０６に関連する変数及びデータ構造等のデータ２１６を含む。データ２１６は、オブジェクトＣ２０６に関連するロックオブジェクトＣ２１７を含む。オブジェクトＣ２０６はまた、データ２１６に作用する手順２１８を含む。
【００２７】
オブジェクト呼出階層２００におけるオブジェクト２０２，２０４，２０６の間でなされる呼出は、階層関係を定義する。階層関係は、オブジェクトＡ２０２を、オブジェクトＢ２０４及びオブジェクトＣ２０６の両方に対して「上位」レベルオブジェクトとし、一方、オブジェクトＣ２０６は、オブジェクトＡ２０２及びオブジェクトＢ２０４の両方に対して「下位」レベルオブジェクトとなる。これに対して、オブジェクトＢ２０４は、オブジェクトＡ２０２に対して「下位」レベルオブジェクトとなるが、オブジェクトＣ２０６に対しては「上位」レベルオブジェクトとなる。これは、オブジェクトＡ２０２を呼び出すことによりオブジェクトＢ２０４が呼び出され、このことは、以下により詳細に説明するように、順次、オブジェクトＣ２０６もまた呼び出せることになるためである。
【００２８】
本発明の一実施形態によれば、オブジェクトＡ２０２，オブジェクトＢ２０４及びオブジェクトＣ２０６に関連するロックオブジェクトＡ２０９，Ｂ２１３，Ｃ２１７の１つは、夫々、オブジェクトＡ２０２，Ｂ２０４及びＣ２０６のためのロックオブジェクトに選定される。オブジェクト呼出階層２００における各オブジェクトＡ２０２，Ｂ２０４，Ｃ２０６は、オブジェクトが構築されたときに選定されたロックオブジェクトの同一性へのアクセスを提供されると共に、オブジェクトに関連する同期手順が呼び出されたとき、選定されたロックオブジェクト上でロックを得る。オブジェクト呼出階層２００における他のオブジェクトが呼び出されると、かかるオブジェクトはまた、選定されたロックオブジェクト上でロックを得る。選定されたロックオブジェクトがオブジェクトによってロックされると、選定されたロックオブジェクト上の全ての連続するロックは、再ロックオペレーションであり、これは、最初のロックオペレーションより処理のためのオーバヘッドの要求がかなり少なくなる。
【００２９】
ボトムアップアプローチによる明白なオブジェクトロッキングを提供する際に必要とされる具体的なステップは、図２のブロック図、及び、図３のフローチャートを参照して次に述べられる。
ステップ３００で開始した後、ステップ３０２において、スレッドは、１つ以上のオブジェクトの構築の間、オブジェクトをロックオブジェクトに選定する。前述したように、ロックオブジェクトに選定されたオブジェクトは、一般的に、オブジェクト呼出階層におけるより下位レベルでオブジェクトに関連付けられる。本実施形態では、スレッドは、ロックオブジェクトとしてのオブジェクトＣ２０６に関連するロックオブジェクトＣ２１７を選定する。ある状態では、オブジェクト呼出階層は、オブジェクト呼出階層において全てが同一の関連レベルとなるいくつかのオブジェクトを含んでもよい。この場合には、ロックオブジェクトの選定は、設計の選択事項となる。
【００３０】
ステップ３０４では、スレッドは、オブジェクトＡ２０２に関連する手順２１０を呼び出す。その後ステップ３０６では、コード２２２の実行により、オブジェクトＡ２０２に選定されるロックオブジェクト上でロックが得られる。オブジェクトＡ２０２は、オブジェクトＣ２０６に関連するロックオブジェクトＣ２１７であり、効果的にオブジェクトＣ２０６をロックする。ロックオブジェクトＣ２１７がロックされると、手順２１０を呼び出したスレッドは、データ２０８に変更をもたらす独占的な権利を有する。手順２１０は、コード２２２より前に他のコードを含むので、他のスレッドは、手順２１０を呼び出すことが可能となる。しかしながら、ロックオブジェクトＣ２１７上でロックが解除されるまで、他のスレッドは、コード２２２を実行することができない。手順２１０はまた、データＡ２２４にアクセスするが、ロックオブジェクトＣ２１７上でロックが解除されるまで、他のスレッドによって実行されることができないコード２２３を含む。
【００３１】
ステップ３０８では、コード２２５の実行により、オブジェクトＢ２０４の手順２１４が呼び出される。本実施形態では、コード２２５は、ロックオブジェクトＣ２１７がオブジェクトＢ２０４によって使用されるロックオブジェクトであることを特定する呼出包含情報を含む。
ステップ３１０では、オブジェクトＡ２０２によってロックオブジェクトＣ２１７上でロックが前もって取得されているので、コード２２６は、ロックオブジェクトＣ２１７を再ロックさせる。前述したように、ロックオペレーションのために必要とされる多くの情報が再ロックオペレーション中に再利用されるので、再ロックオペレーションは、ロックオペレーションよりもシステムリソース及び時間が少なくてすむ。
【００３２】
ステップ３１２では、コード２２８の実行により、オブジェクトＣ２０６の手順２１８が呼び出される。コード２２８は、オブジェクトＣ２０６によって使用されるロックオブジェクトとしてのロックオブジェクトＣ２１７を特定する呼出包含情報を含む。
ステップ３１４では、コード２３０の実行により、ロックオブジェクトＣ２１７が再ロックされる。手順２１８はまた、データＣ２３２にアクセスするコード２３１を含む。
【００３３】
ステップ３１６では、コード２３３の実行により、オブジェクトＣ２０６によって保持されるロックオブジェクトＣ２１７上で１つのロックが解除され、制御を手順２１４に戻す。手順２１４はまた、データＢ２３５にアクセスするコード２３４を含む。データＢ２３５は、ロックオブジェクトＣ２１７上でロックが解除されるまで、他のスレッドによって実行されることができない。
【００３４】
ステップ３１８では、コード２３６の実行により、オブジェクトＢ２０４によって保持されるロックオブジェクトＣ２１７上で１つのロックが解除され、制御を手順２１０に戻す。最後に、ステップ３２０では、コード２３８の実行により、オブジェクトＡ２０２によって保持されるロックオブジェクトＣ２１７上でロックが解除される。
【００３５】
このアプローチによって説明されるように、スレッドがオブジェクト呼出階層２００において手順２１０，２１４，２１８のいずれかを呼び出すと、ロックオブジェクトＣ２１７がロックされる。これにより、他のスレッドが呼び出されたオブジェクトに関連するデータに変更をもたらすことを防止する。さらに、ロックオブジェクトＣ２１７がオブジェクトＡ２０２，Ｂ２０４，Ｃ２０６によって使用されるロックオブジェクトに選定されているので、ロックオブジェクトＣ２１７が再利用される。これにより、再ロックオペレーションがロックオペレーションの代わりに利用されるので、システムリソースを節約し、かつ、性能を改善する。
【００３６】
本発明の実施形態による選択的なオブジェクトロッキングを使用したスレッドを同期するボトムアップアプローチのコード実施の一例は、下記に説明される。コード例は、サンマイクロシステムズインコーポレーテッド（Sun Microsystems Inc. ）によるJava（商標）プログラミング言語に似ているが、かかる例は、単に目的を説明するのためのものにすぎず、実際のコード実行を表示することを意味するものではない。
0004076276.tif 000002
先の説明では、オブジェクト呼出階層におけるオブジェクトは、ロックオブジェクトに選定されたが、オブジェクト呼出階層の外部のオブジェクトが、本発明の範囲から逸脱することなくロックオブジェクトに選定されてもよい。
【００３７】
前記例において、オブジェクトＡ２０２及びオブジェクトＢ２０４は、呼び出したオブジェクトに対し、それらのために特定されたロックオブジェクトを特定するために形成される。しかしながら、オブジェクトは、呼び出したロックオブジェクトに対し、それらのために特定されたロックオブジェクトを特定する必要はない。例えば、オブジェクトＡ２０２がオブジェクトＢ２０４によって使用されるロックオブジェクトとしてロックオブジェクトＣ２１７を特定していても、オブジェクトＤ（図示せず）が、オブジェクトＡ２０２によって使用されるロックオブジェクトとして特定されてもよい。
２．トップダウンアプローチ
ボトムアップアプローチと同様に、トップダウンアプローチは、一般に、一度だけロックされ、その後オブジェクト呼出階層における他の呼び出されたオブジェクトによって再ロックされるロックオブジェクトを選定することを意味する。
【００３８】
トップダウンアプローチによれば、呼出スレッドは、上位階層オブジェクトをロックオブジェクトに選定する。例えば、図２を再び参照すると、呼出スレッド（図示せず）は、それ自体のロックオブジェクトをロックオブジェクトに選定し、、選定されたロックオブジェクトの同一性をオブジェクトＡ２０２に渡す。手順２１０が呼び出されると、選定されたロックオブジェクトの同一性は、その後、かかるオブジェクトの同期された実行の間、オブジェクト呼出階層２００において全てのオブジェクトＡ２０２，Ｂ２０４，Ｃ２０６によって使用される。しかしながら、トップダウンアプローチによれば、呼出階層に明確に関連しない他のオブジェクトが、ロックオブジェクトとして選択されてもよい。
【００３９】
トップダウンアプローチは、デベロッパがオブジェクトレベルの同期を既に実行したオブジェクトクラスライブラリに関連する手順を呼び出すプログラムを構築する場合において、特に都合のよいものである。
３．任意のロッキングアプローチ
１つのスレッドだけがオブジェクトを呼び出している状態では、シングルスレッドアプリケーションのような、スレッド同期は必要ない。しかしながら、オブジェクトロッキングは、シングルスレッドアプリケーションによって使用されるオブジェクトライブラリに組み込まれてもよい。この状態では、オブジェクトロッキングは必要でなく、貴重なシステムリソースを無駄にする。
【００４０】
オブジェクトクラスライブラリのデベロッパは、ライブラリが開発されたときに、ライブラリがシングルスレッドアプリケーションによってのみ使用されるか否か、或いは、何らかの他の理由によりオブジェクトロッキングが必要ないことを常にわかるわけではないので、スレッド同期は、一般に、ライブラリに組み込まれる。オブジェクトロッキングの有無にかかわらず複製のライブラリを提供する代わりの実施は、アプリケーションデベロッパがマルチスレッドアプリケーションによる非同期ライブラリを不注意に使用する危険性があり、それゆえに、一般に回避される。従って、標準の実施は、オブジェクトロッキングを伴った同期されたオブジェクトクラスライブラリを提供することである。
【００４１】
任意のロッキングアプローチによれば、オブジェクトロッキングが使用されるか否かを特定する能力が提供される。スレッド同期が必要でない状態でオブジェクトロッキングを回避することは、オブジェクトをロックすることに通常起因するシステムリソースの使用を排除し、ロックを得るのに必要とされる時間を節約する。さらに、ロックオブジェクトがオブジェクトに動的に割り当てられた状態では、ロックオブジェクトのために通常必要とされる領域が節約される。単一のオブジェクトのために節約される領域は、数バイトのデータにすぎないが、システムリソース及び時間を節約することは、数千の、或いは、ことによると数百万のオブジェクトを使用するアプリケーションにとっては、かなりのものとなる。
【００４２】
任意のロッキングアプローチによれば、オブジェクトロッキングパラメータは、各オブジェクトコンストラクタ呼出に含まれる。オブジェクトロッキングパラメータは、オブジェクトロッキングがオブジェクトによって使用されるか否かを特定し、もしそうであれば、そのオブジェクトはロックされる。つまり、パラメータは、(1) ロックオブジェクトを特定するか、或いは、(2) オブジェクトロッキングが行われないことを示す所定値を特定するか、のいずれかを行う。
【００４３】
ロックオブジェクトが特定されたとき、オブジェクトの同期手順は、特定されたロックオブジェクト上でロックを得る。これに対して、オブジェクトロッキングが行われないことを示す所定値が特定されたとき、呼び出された手順は、いかなるオブジェクトロッキングも実行しない。本発明の一実施形態によれば、オブジェクトロッキングがないことを特定する所定値として、ＮＵＬＬ値が使用される。しかしながら、他の所定値が、本発明の範囲から逸脱せずに使用されてもよい。
【００４４】
例えば、図２を再び参照すると、手順２１０がオブジェクトＡ２０２のためのコンストラクタであると仮定する。呼出スレッドは、オブジェクトＡ２０２に関連する手順２１０を呼び出すと共に、手順２１０を呼び出す呼出におけるオブジェクトロッキングパラメータを含む。オブジェクトロッキングパラメータは、コード２２２によって評価され、その値に応じて適切な処理が取られる。
【００４５】
最初の場合には、ロックオブジェクトパラメータは、手順２１０によって使用されるロックオブジェクトを特定する。この場合、コード２２２により、ロックオブジェクトパラメータによって特定されるロックオブジェクト上で、ロックが得られる。前述したボトムアップアプローチによれば、ロックオブジェクトパラメータは、オブジェクトＣ２０６に関連するロックオブジェクトＣ２１７を特定する。これに対して、トップダウンアプローチによれば、ロックオブジェクトパラメータは、呼出メソッドに関連するロックオブジェクトを特定する。
【００４６】
ロックオブジェクトを特定する代わりに、オブジェクトロッキングが行われないようにするため、オブジェクトロックパラメータは、ＮＵＬＬ値のような所定値を特定してもよい。
任意のロッキングアプローチは、オブジェクト毎に基づいて使用されるロッキングのタイプを選択的に特定するプログラムに柔軟性を提供する。プログラムは、あるオブジェクトに対するロッキング、及び、他のオブジェクトに対するロッキングなしを特定してもよい。例えば、アプリケーションデベロッパは、オブジェクトが１つのスレッドのみによって使用される特定のマルチスレッドアプリケーションを知っていてもよい。任意のロックキングアプローチを使用して、アプリケーションデベロッパは、他のオブジェクトが全くロックされないのに対し、あるオブジェクトがオブジェクトロッキングにより保護されることを特定してもよい。もちろん、あるオブジェクトに対してオブジェクトロッキングを特定し、他のオブジェクトに対してオブジェクトロッキングを特定しないことは、危険な状態で保護されていないオブジェクトに関連するデータを配置するので、スレッドが設計通りに実行しない危険性、或いは、付加的なスレッドが後に付加される危険性がある。
【００４７】
任意のロッキングアプローチは、図２のブロック図及び図４のフローチャートを参照して以下述べられる。ステップ４００で開始した後、ステップ４０２では、呼出手順は、オブジェクトＡ２０２に関連する手順２１０を呼び出す。実施は、ロックオブジェクトパラメータを含む。ロックオブジェクトパラメータは、オブジェクトロッキングがオブジェクトＡ２０２によって行われたか否かを特定し、もしそうであれば、オブジェクトロックが使用される。
【００４８】
ステップ４０４では、コード２０２は、呼出手順によって提供されたロックオブジェクトパラメータを評価する。ステップ４０６では、コード２２２によって、ロックオブジェクトパラメータがロックオブジェクトを特定するか否かの決定がなされる。もしそうであれば、その後ステップ４０８において、コード２２２により、ロックオブジェクトパラメータによって特定されたロックオブジェクト上でロックが得られる。ロックオブジェクトパラメータによって特定されたロックオブジェクトは、ロックオブジェクトとして使用されるどんなオブジェクトであってもよい。
【００４９】
これに対して、ステップ４０６において、ロックオブジェクトパラメータがロックオブジェクトを特定していなければ、オブジェクトロッキングが行われず、処理がステップ４１０で終了する。本発明の一実施形態によれば、オブジェクトロッキングが行われないことを示すのに、ＮＵＬＬ値が使用される。しかしながら、本発明の範囲から逸脱することなく、他の所定値もまた使用されてもよい。
【００５０】
本発明の一実施形態による任意のロッキングアプローチのコード実行の一例は、次のように示される。例は、単に目的を説明するものにすぎず、完全なコード実行を表わすことを意味するものではない。
0004076276.tif 000003
任意のロッキングアプローチによれば、このコード例は、オブジェクトロックパラメータが呼び出されたオブジェクトに渡され、その後、オブジェクトロッキングが行われるか否かを決定するオブジェクトに関連する手順によって調べられることを示す。
【００５１】
本発明の実施形態は、オブジェクトの作成（構築）の間、ロックオブジェクトを選定するという面において説明されるが、ロックオブジェクトの選定は、後の時間まで延期されてもよい。例えば、ロックオブジェクトの選定は、オブジェクトが呼び出されたときになされ、オブジェクトの内部或いは外部で決定されてもよい。ロックオブジェクトは、その後、オブジェクト自身により処理され、或いは、オブジェクトの外部で処理される。
ハードウエアの概要
図５は、本発明の一実施形態が実行されるコンピュータシステム５００を示すブロック図である。コンピュータシステム５００は、バス５０２或いは通信情報のための他の通信機構、及び、情報を処理するためのバス５０２に接続されたプロセッサ５０４を含む。コンピュータシステム５００はまた、ランダムアクセスメモリ（ＲＡＭ）或いは他の動的な記憶装置等のプロセッサ５０４によって実行される情報及び命令を記憶するためのバス５０２に接続されるメインメモリ５０６を含む。メインメモリ５０６はまた、プロセッサ５０４による命令実行の間、一時的変数或いは他の中間情報を記憶するために使用されてもよい。コンピュータシステム５００はまた、プロセッサ５０４のための静的な情報及び命令を記憶するための、バス５０２に接続されたリードオンリーメモリ（ＲＯＭ）５０８或いは他の静的な記憶装置を含む。磁気ディスク或いは光ディスク等の記憶装置５１０はまた、情報及び命令を記憶するために提供されかつバス５０２に接続される。
【００５２】
コンピュータシステム５００はまた、コンピュータユーザに情報を表示するための、バス５０２を介してカソードレイチューブ（ＣＲＴ）等のディスプレイ５１２に接続される。英数字及び他のキーを含む入力装置５１４はまたプロセッサ５０４に対して情報及びコマンド選択を伝達するために、提供されかつバス５０２に接続される。ユーザ入力装置の他の形式は、プロセッサ５０４に方向情報及びコマンド選択を伝達すると共に、ディスプレイ５１２上のカーソルの動きを制御するマウス，トラックボール或いはカーソル移動キー等のカーソルコントロール５１６である。この入力装置は、一般に、装置が面における位置を特定することを可能にする第１の軸（例えば、ｘ）及び第２の軸（例えば、ｙ）の２軸において２つの自由度を有している。
【００５３】
本発明は、選択的なオブジェクトロッキングによるスレッドを同期するコンピュータシステム５００の使用に関する。本発明の一実施形態によれば、選択的なオブジェクトロッキングによるスレッド同期は、メインメモリ５０６に含まれる一連の命令を実行するプロセッサ５０４に応じて、コンピュータシステム５００によって提供される。このような命令は、記憶装置５１０のような他のコンピュータ読み取り可能な媒体から、メインメモリ５０６に読み込まれる。しかしながら、コンピュータ読み取り可能な媒体は、記憶装置５１０のような装置に限定されない。例えば、コンピュータ読み取り可能な媒体は、フロッピーディスク，フレキシブルディスク，ハードディスク，磁気テープ或いは他の磁気媒体，ＣＤ−ＲＯＭ，他の光媒体，ＲＡＭ，ＰＲＯＭ，ＥＰＲＯＭ，ＦＬＡＳＨ−ＥＰＲＯＭ，他のメモリチップ或いはカートリッジ，コンピュータが読み込める他の媒体を含む。メインメモリ５０６に含まれる一連の命令の実行により、プロセッサ５０４が前述した処理ステップを実行する。他の実施形態では、ハードウエア（hard-wired）電気回路が、本発明を実行するために、ソフトウエア命令の代わりに、或いは、ソフトウエア命令と協働して使用されてもよい。このように、本発明の実施形態は、ハードウエア電気回路とソフトウエアの特定の組合わせに限定されるものではない。
【００５４】
コンピュータ５００はまた、バス５０２に接続された通信インタフェース５１８を含む。通信インタフェース５０８は、ローカルネットワーク５２２へのネットワークリンク５２０に接続する双方向データ通信を提供する。例えば、通信インタフェース５１８がサービス統合デジタルネットワーク（ＩＳＤＮ）カード或いはモデムであれば、通信インタフェース５１８は、電話回線の通信形式へのデータ通信接続を提供する。もし通信インタフェース５１８がローカルエリアネットワーク（ＬＡＮ）カードであれば、通信インタフェース５１８は、互換ＬＡＮへのデータ通信接続を提供する。無線リンクもまた可能である。このような実装のいずれにおいても、通信インターフェース５１８は、種々の情報形式を表わすデジタルデータストリームを保持する電気信号，電磁信号或いは光信号を送信しかつ受信する。
【００５５】
ネットワークリンク５２０は、一般に、１つ以上のネットワークを介して他のデータ装置にデータ通信を提供する。例えば、ネットワークリンク５２０は、ローカルネットワーク５２２を介して、ホストコンピュータ５２４或いはインターネットサービスプロバイダ（ＩＳＰ）５２６によって操作されるデータ機器への接続を提供する。ＩＳＰ５２６は、一般に今日では「インターネット」５２８と呼ばれるワールドワイドパケットデータ通信ネットワークを介して、データ通信サービスを次々と提供する。ローカルネットワーク５２２及びインターネット５２８の両者は、デジタルデータストリームを保持する電気信号，電磁信号或いは光信号を使用する。種々のネットワークを介した信号、及び、ネットワークリンク５２０上及び通信インタフェース５１８を介した信号は、コンピュータ５００に入出力されるデジタルデータを保持し、情報を搬送する搬送波の形状を示す。
【００５６】
コンピュータ５００は、メッセージを送信し、ネットワーク，ネットワークリンク５２０及び通信インタフェース５１８を介して、プログラムコードを含んだデータを受信する。インターネットの例では、サーバ５３０が、インターネット５２８，ＩＳＰ５２６，ローカルネットワーク５２２及び通信インタフェース５１８を介してアプリケーションプログラムに要求コードを送信する。本発明によれば、このようなダウンロードされたアプリケーションは、ここで述べたように、選択的なオブジェクトロッキングを使用するスレッド同期に対応する。
【００５７】
受信コードは、受信されると、プロセッサ５０４によって実行され、及び／或いは、後の実行のために、記憶装置５１０或いは他の不揮発性記憶装置に記憶される。このように、コンピュータ５００は、搬送波形状でアプリケーションコードを得る。
上記記載において、本発明は、特定の実施形態に関して説明された。しかしながら、種々の変更及び変化が本発明のより広範囲の精神及び範囲から逸脱することなく、なされることは明らかである。それゆえに、明細書及び図面は、制限的な意味よりもむしろ実例となるものであるとみなされる。
【００５８】
【発明の効果】
本発明は、複数のスレッドによって共通にアクセス可能なデータが同時にアクセスされないように、スレッドを同期する従来のアプローチを越えたいくつかの有利な点を提供する。特に、本発明は、スレッドによって呼び出されるオブジェクト呼出階層で、１つ以上のオブジェクトによって使用されるロックオブジェクトを選定する呼出スレッドのための能力を提供する。この能力の重要な利点は、一旦最初のロックが得られると、再ロックオペレーションを実行するために、必要なシステムリソースがかなり少なくてすむことである。また、ロックオブジェクトをロックするよりもロックオブジェクトを再ロックする方が、より時間が少ない。さらに、シングルスレッドアプリケーション、或いは、オブジェクトロッキングが必要でない他の状態では、本発明は、オブジェクト毎に基づくオブジェクトロッキングを無視する柔軟性を提供する。処理の見地からシステムリソースを節約することに加えて、あるシステムでは、これは呼び出された各オブジェクトに対して、ロックオブジェクトの割り当てを回避する。
【図面の簡単な説明】
【図１】  従来技術のオブジェクト呼出階層を示すブロック図
【図２】  本発明の一実施形態によるオブジェクト呼出階層を示すブロック図
【図３】  本発明の一実施形態によるマルチスレッド環境におけるオブジェクトに関連するデータを保護する手順を示すフローチャート
【図４】  本発明の他の実施形態によるマルチスレッド環境におけるオブジェクトに関連するデータを保護する手順を示すフローチャート
【図５】  本発明が実行されるコンピュータシステムのブロック図
【図１】
0004076276.tif 000004
【図２】
0004076276.tif 000005
【図３】
0004076276.tif 000006
【図４】
0004076276.tif 000007
【図５】
0004076276.tif 000008