JPH11259313A - マルチスレッド計算環境内で関連付けられたデ―タ構造をロックするための方法、装置及びコンピュ―タプログラム製品 - Google Patents

マルチスレッド計算環境内で関連付けられたデ―タ構造をロックするための方法、装置及びコンピュ―タプログラム製品

Info

Publication number
JPH11259313A
JPH11259313A JP11014244A JP1424499A JPH11259313A JP H11259313 A JPH11259313 A JP H11259313A JP 11014244 A JP11014244 A JP 11014244A JP 1424499 A JP1424499 A JP 1424499A JP H11259313 A JPH11259313 A JP H11259313A
Authority
JP
Japan
Prior art keywords
group
lock
correlated
objects
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP11014244A
Other languages
English (en)
Inventor
John L Furlani
ジョン・エル・ファラニ
Alexandra R Ohlson
アレキサンダー・アール・オールソン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH11259313A publication Critical patent/JPH11259313A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】排他的スレッド・アクセスを必要とするオブジ
ェクト・コレクション内のオブジェクトを利用するマル
チスレッド・コンピュータ・アプリケーションの性能を
改善する装置、方法、及びプログラム製品が開示されて
いる。 【解決手段】本発明は、オブジェクトコレクション内の
オブジェクト間の相互関係を監視して、排他的スレッド
アクセスのためこれらオブジェクトの最少の組をロック
する機構を提供する。これらのオブジェクトがロックさ
れるとき、独立もしくは無関係のオブジェクトはロック
されないままなので、別のスレッドがロックすることが
可能となる。最少の組のオブジェクトがロックされるの
で、そのオブジェクトコレクションにアクセスする他の
スレッドは、そのロックにより阻止される可能性が少な
い。こうして、これら他のスレッドはオブジェクトコレ
クション内のオブジェクトに同時にアクセスすることが
できる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、マルチスレッド計
算環境におけるデータ構造のロック技術に関する。特
に、本発明は、マルチスレッド計算環境におけるデータ
構造の相関グループをロックする方法、装置及びコンピ
ュータプログラム製品である。
【0002】
【従来の技術】データ構造は、コンピュータのメモリ内
で組織化された情報を保持する。これらのデータ構造の
各々は、他のデータ構造に対し独立にもできるし相互に
関連付けさせることもできる。データ構造へのアクセス
は、アクセスがシングルフロー実行(実行スレッド)を
有する計算環境において起こるときは、相関データ構造
内のデータがシングルスレッドの実行中、常に不変なの
で、簡単である。しかし、非同期演算(割り込み、コン
テクスト切り替え処理またはその他データ構造への競合
アクセスができる類似の演算)が起こったとき、別の演
算がそのデータ構造にアクセスしている間に非同期演算
がデータ構造を変更すると、データ構造の内容が不変で
なくなることがある。近年の計算システムは、コンピュ
ータ演算を並列化するため複数の実行のスレッドを用い
ることが多い。
【0003】実行スレッド(スレッド)とは、プログラ
ムされた処理内での制御の順序である。在来のシングル
スレッドでプログラムされた処理は、実行中に単一の制
御順序に従う。マルチスレッドのプログラムされた処理
は、幾つかの処理順序を有し、幾つかの独立の行動をす
る能力がある。マルチスレッド計算環境の具体的な実装
について、Powell、Klieman、Barton、Shah、Steinおよ
びWeeksによりSunOS Multi-Thread Architectureの題名
で、USENIX、1991年冬号65頁に論じられている。Posix
(登録商標)スレッドについては、David R.Butenhof著Pr
ogramming with POSIX Thread、版権1997 Addison Wesl
ey Longman、Inc.,ISPN 0-201-63392-2、35-95頁に記述
されている。
【0004】続いて開示される発明は、オブジェクト指
向プログラミング(OOP)パラダイムのコンテクスト
に従って記述されている。OOPパラダイムはオブジェ
クトを用いる。オブジェクトは、オブジェクトのデータ
を、そのオブジェクトのデータに関して演算するための
OOPメソッドに関連付ける。通常、OOPオブジェク
トは、ヒープメモリ領域にインスタンス化され、OOP
オブジェクト用にプログラムメソッドを参照するクラス
に基づく。インスタンス化されたOOPオブジェクトは
ポインタを通じてアクセスされ、そのインスタンス化さ
れた特定のOOPオブジェクトに固有であるデータをイ
ンスタンス変数に含む。概念的に、OOPオブジェクト
は、オブジェクト関連情報(オブジェクト内のインスタ
ンス変数の数など)、オブジェクトのインスタンス変数
を記憶するためのデータ構造、及びオブジェクト内のイ
ンスタンス変数にアクセスし、その値を扱うための呼び
出されたルーチン(OOPメソッド)のアドレスを保持
する。しかし、オブジェクトは、呼び出されたルーチン
及びオブジェクト関連情報を共有することが多いので、
この共有情報は、通常クラス内に抽出される。こうし
て、インスタンス化されたオブジェクトは単にそのイン
スタンス変数及びそのクラスへのポインタを含むだけで
ある。OOPの概念に関する詳しい情報は、Peter vand
er Linden著、Not Just Java、Sun Microsystems Press
/Prentice Hall PTR Corp., Upper Saddle River, NJ.
(1997), ISBN 0-13-864638, 136-149頁に見出される。
【0005】データ構造はまた、OOPパラダイムにお
けるオブジェクトとしても取り扱うことができる。この
ようなデータ構造オブジェクトには、データ構造を構成
するインスタンス化されたデータ、このデータにアクセ
スするためプログラムメソッド及び可能性として他のデ
ータ構造オブジェクトへのリンクが含まれる。
【0006】画像処理目的(及び他の多くの用途)に有
用なデータ構造は、画像及びこれらの画像に加えられる
演算を表わす修正された有向無周期グラフ(DAG)で
ある。DAGエレメントはオブジェクトとして表わすこ
とができる。画像ライブラリが一個以上のソース画像に
対する一連の画像演算を捕らえたとき、そのライブラリ
によって、一個以上のDAGを構築することができる。
出来上がったDAGは、オブジェクトコレクションの中
に保持される。オブジェクトコレクションは、普通、独
立及び相関DAGオブジェクトの双方を保持する。独立
オブジェクトとは、他のオブジェクトに依存しないオブ
ジェクトである。相関オブジェクトは、その演算を実行
するため互いにアクセスする。独立オブジェクトは、そ
のスレッドに排他的アクセスを保証するためスレッドに
よってロックすることができる。しかし、一つの相関オ
ブジェクトをロックするには、第一のスレッドが処理し
ている間に第二のスレッドによりオブジェクト内の情報
が変更されないことを保証するため、各相関オブジェク
トもまたロックされなければならない。
【0007】
【発明が解決しようとする課題】オブジェクトをロック
するための一つの先行技術の方法は、オブジェクトコレ
クションへのスレッドアクセスを順序付けるためミュー
テックス(mutex)を用いる。この手法での難点は、一
つのスレッドがオブジェクトコレクションの中の一つの
オブジェクトを処理している間は他のスレッドがこれを
出来ないことである。このように、スレッドが制御する
独立演算であって、オブジェクトコレクション中のオブ
ジェクトにアクセスする必要のある独立演算は、ロック
しているスレッドがそのオブジェクトコレクションを解
放するまで、アクセス出来ない。この手法は、オブジェ
クトコレクションを阻害要因にしてしまって、マルチス
レッド計算環境の利点を制限する。
【0008】別の先行技術は、オブジェクトコレクショ
ン内で相互に関連しそうなオブジェクトの各グループへ
のアクセスを順序付けるよう(一般的に制御オブジェク
ト内で)ミューテックスを割り当てる。こうして、オブ
ジェクトコレクションは、それぞれがオブジェクトコレ
クションの独立グループへのアクセスを制御する多数の
制御オブジェクトを有することとなり、そして各グルー
プは相互依存しそうなオブジェクトを含む。この先行技
術に伴う難点は、相関していると思われるが実は相関し
ていないことが多いオブジェクトのグループへのアクセ
スを制御するため制御オブジェクトを用いていることで
ある。これは、制御オブジェクトが多すぎて必要オブジ
ェクト以上をロックすることを意味する。その結果、ス
レッドブロックが増加して性能が落ちる。
【0009】オブジェクトコレクションの中のどのオブ
ジェクトが実際に相互に関連付けられているかを監視し
て、各制御オブジェクトを相関オブジェクトの最少グル
ープへのアクセスに限定するために使うのが有益であ
る。
【0010】
【課題を解決するための手段】本発明は、スレッドが排
他的にアクセスしなければならない値を含む相関データ
構造のグループを用いるマルチスレッド・コンピュータ
・アプリケーションの性能を改善する。本発明はデータ
構造の間の相関関係を監視し、排他的スレッドアクセス
を必要とするデータ構造の最少の組をロックする機構を
提供する。本発明は、独立データ構造またはデータ構造
の非相関グループをロックしないで他のスレッドが利用
できるようにしたまま、グループから構成される相関デ
ータ構造をロックするのみである。グループは相関デー
タ構造の最少の組を含むので、そのグループがロックさ
れたとき他のスレッドがロックにより阻止される可能性
が小さい。こうして、他のスレッドが別のグループ内の
データ構造を同時に処理できる可能性が大きくなる。
【0011】本発明の一つの側面は、非相関オブジェク
トをロックしたままにすることなくオブジェクトコレク
ション内の対象オブジェクトをロックするための、コン
ピュータ制御方法である。マルチスレッド計算環境にお
いてオブジェクトコレクションは一個以上のスレッドが
アクセスする。グループロックが、対象オブジェクトを
含めて相関オブジェクトの対応グループへのスレッドア
クセスを制御する。この方法は、グループロックが用い
る複数のグループロックリンケージへのスレッドアクセ
スを制御するため、参照ロックをオブジェクトコレクシ
ョンに関連付けするステップを含む。本方法はまた、相
関オブジェクトの対応グループ内における第一のオブジ
ェクトと第二のオブジェクトの間の関係の変化に応じて
複数のグループロックリンケージを修正するステップを
含む。もう一つのステップは、対象オブジェクトを含む
相関オブジェクトの対応グループをロックすることに関
する。すなわち、このステップは対象オブジェクト及び
その相関オブジェクトをロックする。
【0012】本発明の別の側面は、非相関オブジェクト
をロックしたままにするすることなくオブジェクトコレ
クション内の対象オブジェクトをロックするための、中
央処理装置(CPU)及び前記CPUに結合されたメモ
リを有する装置である。マルチスレッド計算環境におい
てオブジェクトコレクションには一個以上のスレッドが
アクセスする。グループロックが、対象オブジェクトを
含む相関オブジェクトの対応グループへのスレッドアク
セスを制御する。この装置は、グループロックによって
使用される複数のグループロックリンケージへのスレッ
ドアクセスを参照ロック機構が制御するよう、参照ロッ
クをオブジェクトコレクションに関連付けするよう構成
された参照ロック機構を含む。この装置はまた、相関オ
ブジェクトの対応グループを修正するよう構成されたグ
ループ修正機構を含む。この修正は、相関オブジェクト
の対応グループ内で第一のオブジェクトと第二のオブジ
ェクトの間の関係を変更することにより達成される。加
えてこの装置は、前記対象オブジェクトを含めて、相関
オブジェクトの対応グループをロックするよう構成され
たグループロック機構を含み、それにより前記対象オブ
ジェクト及びその相関オブジェクトをロックする。
【0013】さらに別の本発明の側面は、非相関オブジ
ェクトをロックしたままにすることなくオブジェクトコ
レクション内の対象オブジェクトをコンピュータにロッ
クさせるための、コンピュータで使用可能な媒体上に実
装されたコンピュータプログラム製品である。マルチス
レッド計算環境においてオブジェクトコレクションには
一個以上のスレッドがアクセスする。グループロック
が、対象オブジェクトを含む相関オブジェクトの対応グ
ループへのスレッドアクセスを制御する。コンピュータ
上で実行した場合、このコンピュータに読み込めるコー
ドはコンピュータで、参照ロック機構、グループ修正機
構及びグループロック機構が動作するようにする。これ
らの機構の各々は前述の装置に関する相当機構と同じ機
能を有する。
【0014】
【発明の実施の形態】前述及びその他の本発明の多くの
側面は、各種図面に図示された好適実施例の下記詳細説
明の読了後、疑いなく当事者に明らかになるであろう。
【0015】[用語表]下記の「用語表」は本発明及びそ
の好適実施例の理解を助けるため用意した。条件変数
(Condition variable)−条件変数とは、条件付スレッ
ド同期機構である。条件変数は、条件が「偽」のとき、
スレッドが、ミューテックスを取得し、条件をテスト
し、ミューテックスを解放し及び保留になることを可能
とする。条件が「真」になったとき、スレッドは再開さ
れ、再度ミューテックスを取得する。このように、スレ
ッドは条件をテストし、これが満足されたときに、ミュ
ーテックスを取得して処理を継続する。 データ構造(Data Structure)−データ構造とは、変数
に関するメモリ中の記憶の秩序ある配置である。データ
構造は普通OOPオブジェクト内に含まれる。 ミューテックス(Mutex)−ミューテックス(相互排他
ロック)とは、スレッド同期プリミティブである。ミュ
ーテックスを呼び出そうとする最初のスレッドがミュー
テックスを取得する。それ以後のミューテッスクの呼び
出しは、呼び出したスレッドが阻止される結果を生じ
る。ミューテックスを取得したスレッドは次いでミュー
テックスを解放することができる。ミューテックスが解
放(ロック解除)されると阻止されたスレッドがミュー
テックス取得を争う。 オブジェクト(Object)−オブジェクト指向プログラミ
ング・パラダイムにおけるオブジェクトとは、プログラ
ムメソッドとデータ構造とが関連付けられたものであっ
てクラス及びクラスのオブジェクトを表わすインスタン
ス化された記憶により定義される。 オブジェクトコレクション(Object Collection)−オ
ブジェクトコレクションとは、(プログラムメソッド及
びデータ構造を含む)OOPオブジェクトの集合であ
る。好適実施例におけるオブジェクトコレクションに
は、画像処理用に用いられる有向無周期的グラフ(DA
G)が含まれる。 ポインタ(Pointer)−ポインタとは、データ構造また
はオブジェクトを参照するため用いられるデータ値であ
る。当業者は「ポインタ」には、無制限で、対象の情報
へのメモリアドレスまたはアドレス計算のため用いられ
る値、およびハンドルと類似構造を含む任意の機能的等
価物が含まれることを理解するであろう。 プログラムメソッド(Programmed method)−プログラ
ムメソッドとは、オブジェクトに関連したプログラムプ
ロシージャである。プログラムメソッドは、オブジェク
トに演算を実行させるため呼び出される。プロシージャ
プログラミング・パラダイムにおいては、プログラムメ
ソッドは、プログラムルーチンまたはファンクションと
同等である。 プロシージャ(Procedure)−プロシージャとは、望み
の結果を導き出す首尾一貫した一連のステップである。
これらのステップは、物理量の物理的取扱いを要求する
ものである。通常これらの量は記憶、転送、結合、比較
及び別途取扱いのできる電気的または磁気的信号の形を
取る。これらの信号は、ビット、値、要素、記号、文
字、術語、数字、または類似のものとして参照される。
当業者はこれら及び同様の術語のすべてが適切な物理量
と結びついておりこれらの量に適用される便利なラベル
に過ぎないことを理解するであろう。
【0016】[概要]コンピュータが命令の実行に当たっ
て実施する操作は、加算または比較のような、人間の演
算者が行う知的演算に広く結びついた用語であらわされ
ることが多い。本発明においては、ここに記述する演算
のいずれにおいてもこのような人間の演算者の能力は必
要としない。演算はマシン演算である。本発明の演算を
実行するため有用なマシンには、プログラムされた汎用
デジタルコンピュータまたは類似の装置が含まれる。あ
らゆる場合に計算方法は、コンピュータ演算における演
算方法とは区別される。本発明は、電気的またはその他
の(例えば、機械的、化学的)物理信号を処理して別の
望みの物理的信号を発生する際にコンピュータに演算さ
せるためのメソッド・ステップに関する。
【0017】本発明はまた、これらの演算を実行するた
めの装置にも関する。この装置は、所要目的のため特別
に構築されることもあり、コンピュータのメモリ内に記
憶されたコンピュータ・プログラムにより選択的に起動
もしくは再構築した汎用コンピュータを含むこともあ
る。ここに示したプロシージャは、特定のコンピュータ
またはその他の装置に本質的には関係しない。詳細に
は、各種の汎用マシンがここに述べた技術にしたがって
書いたプログラムを用いて使えるか、または必要なメソ
ッド・ステップを実行するのにもっと専門化した装置を
構築するのがさらに便利であると判明するかである。各
種のこれらマシンに必要な構造は以下の記述により明ら
かになるであろう。また、本発明はプログラムロジック
をコンピュータに実行させるプログラムにコード化して
コンピュータ読取り可能記憶媒体内に具体化できる。
【0018】[演算環境]当業者は、本発明の以下の記述
はオブジェクト指向パラダイムに注目しているが、開示
された技術は他のプログラミング・パラダイムにも適用
できることを理解するであろう。
【0019】好適実施例は、画像およびこれらの画像に
適用される演算を表わすのに修正された有向無周期グラ
フ(DAG)を使用する。当業者は、DAG以外のデー
タ構造も同様の結果を伴って使用できることを理解する
であろう。DAGは、ライブラリが一連の画像化演算を
捕らえたとき画像化ライブラリにより構築される。当業
者は、本発明が画像処理以外の分野においても実用でき
ること及び本発明が本発明の用途を示すため以下で用い
るもの以外のオブジェクト及びデータ構造にも応用でき
ることを理解するであろう。
【0020】本発明はコンピュータを使用する。本発明
をサポートするために構成された、符号100で示すよ
うな、コンピュータの幾つかの要素を図1に示す。ここ
には処理装置101が、中央処理装置(CPU)10
3、メモリ区画105及び入出力(I/O)区画107
を有しているのが示されている。I/O区画107は、
キーボード109、表示装置101、ディスク記憶装置
113およびCD−ROM駆動装置115に接続されて
いる。CD−ROM駆動装置115は、一般的にプログ
ラム及びデータ119を含むCD−ROM媒体117を
読み込むことができる。CD−ROM媒体117を伴う
CD−ROM駆動装置115、及びディスク記憶装置1
13はファイル記憶機構を構成する。当業者は、CD−
ROM駆動装置115が、フロッピイディスク、磁気テ
ープ装置またはプログラム及びデータ119を収容でき
る着脱可能媒体を受け入れる類似の装置に置換できるこ
とを理解するであろう。このようなコンピュータ・シス
テムは本発明を具体化したアプリケーションを実行する
能力がある。
【0021】図2は、符号200によりあらわされる、
それぞれが相関オブジェクトを含む二つの独立グループ
を備えたグループ化されたオブジェクトコレクションを
示す。二つのグループは、別のスレッドにより並列に処
理することができる。この例においては、相関オブジェ
クトの第一のグループ201は、第一画像を表わすのに
用いられた「第一画像」オブジェクト203、第二画像
を表わすのに用いられた「第二画像」オブジェクト20
5、「第一画像」オブジェクト203と「第二画像」オ
ブジェクト205の和を発生する画像演算を表わすのに
用いられた「加算演算」オブジェクト207を含む。こ
の加算画像は「第一結果画像」オブジェクト209であ
らわされる。当業者は、相関オブジェクトの第一のグル
ープ201の各オブジェクトが、「加算演算」オブジェ
クト207を通じて互いに関連していること及び「加算
演算」オブジェクト207が表わす演算を実行するスレ
ッドが、オブジェクト203、205、207、209
のグループ全体に排他的アクセスを有していなければな
らないことを理解するであろう。
【0022】相関オブジェクトの第二のグループ211
は、相関オブジェクトの第一のグループ201とは独立
で、「第三画像」オブジェクト213及び、「ルックア
ップ・テーブル・データ」オブジェクト217にアクセ
スする「LUT演算」オブジェクト215を含む。「L
UT演算」オブジェクト215は、「ルックアップ・テ
ーブル・データ」オブジェクト217を用いて「第三画
像」オブジェクト213に演算をおこない、「第二結果
画像」オブジェクト219を発生する。相関オブジェク
トの第一のグループ201と同様の方法で、相関オブジ
ェクトの第二のグループ211内の各オブジェクトは相
互に関連している。このように、「LUT演算」オブジ
ェクト215であらわされる演算を実行するスレッドは
213、215、217、219のグループ全体に排他
的書き込みアクセスを有していなければならない。相関
オブジェクトの第一のグループ201及び相関オブジェ
クトの第二のグループ211の中のオブジェクトは、オ
ブジェクトコレクション221を作る。二つのグループ
は互いに独立、すなわち一つのグループのオブジェクト
は別のグループ内のオブジェクトに関して非相関オブジ
ェクトであるから、それらは別々のスレッドによりアク
セスできる。相関オブジェクトの第一のグループ201
は「第一グループロック」オブジェクト223によりロ
ックすることができる。相関オブジェクトの第二のグル
ープ211は「第二グループロック」オブジェクト22
5によりロックすることができる。これらのグループロ
ックとオブジェクトコレクション221の中のオブジェ
クトを相互に関連させるリンクは「参照ロック」オブジ
ェクト227によりロックすることができる。各ロック
オブジェクトについては続いて記述する。
【0023】ここで上記参照ロック及びグループロック
の用途をまとめておくのが有益である。これらのロック
は、非相関オブジェクトの中に含まれる。これらのロッ
クオブジェクトは、対象オブジェクトまたはグループ内
のオブジェクトとは相互に関連していない。ロックオブ
ジェクトはグループ内オブジェクトの間の相関関係の結
果ではあるが、それ自体はグループのメンバーではない
からである(ロックオブジェクトはオブジェクトコレク
ション内にある必要もない)。独立オブジェクトにアク
セスするには、スレッドはそのオブジェクトに関するロ
ックを取得する。相関オブジェクトにアクセスするに
は、スレッドは関係するグループロック(「第一グルー
プロック」オブジェクトなど)及びオブジェクトロック
を取得する。オブジェクト間及び/又はグループ間の関
係を変更するには、スレッドは「参照ロック」オブジェ
クト227を取得する。このように、「加算演算」オブ
ジェクト207が表わす演算を実行するには、スレッド
は先ず「第一グループロック」オブジェクト223を取
得しなければならない。
【0024】図3は、相関オブジェクトをグループに関
連付けるための、符号230であらわされる、グループ
連結構造を示す。この例は、相関オブジェクトの第二の
グループ211を「第二グループロック」オブジェクト
225に関連付ける方法を示す。相関オブジェクトの第
二のグループ211の中の各オブジェクト213、21
5、217、219には「グループロック・ポインタ」
オブジェクト231へのポインタが含まれる。こうして
「第三画像」オブジェクト213には、「グループロッ
ク・ポインタ」オブジェクト231を指す「第三画像」
リンク233が含まれる。同様の方法で、「LUT演
算」オブジェクト215には「LUT演算」リンク23
5が含まれ、「ルックアップ・テーブル・データ」オブ
ジェクト217には「ルックアップ・テーブル・デー
タ」リンク237が含まれ、「第二結果画像」オブジェ
クト219には「第二結果画像」リンク239が含まれ
て、それぞれ「グループロック・ポインタ」オブジェク
ト231を指している。「グループロック・ポインタ」
オブジェクト231には、「第二グループロック」オブ
ジェクト225へのグループリンク241が含まれる。
当業者は、「グループロック・ポインタ」オブジェクト
231の中の値を(「第二グループロック」オブジェク
ト225及び逆グループリンク243への適切な変更と
ともに)変え、それによりグループリンク241を一つ
のグループロックから別のグループロックに変更するこ
とにより、前述のリンクは、各オブジェクト、213、
215、217、219に関するリンクを変更すること
なくグループ内の各オブジェクト、213、215、2
17、219を異なるグループに結び付けるのを可能に
することを理解するであろう。
【0025】相互依存オブジェクトの二つの独立グルー
プが、それ自体で相互依存になることが多い。この状況
では、グループ及びそのグループロックを併合しなけれ
ばならない。
【0026】図4は、相関オブジェクトの第一のグルー
プ201を相関オブジェクトの第二のグループ211に
併合した結果の、符号200であらわされた、オブジェ
クトコレクションを示す。「第一結果画像」オブジェク
ト209を「第二結果画像」オブジェクト219に乗算
して「第三結果画像」オブジェクト253を生じる「画
像乗算」オブジェクト251の挿入により、これら二つ
のグループは相互に関連付けられる。「画像乗算」オブ
ジェクト251が相関オブジェクトの第一のグループ2
01を相関オブジェクトの第二のグループ211に相互
に関連付けられるため、二つのグループを一つのグルー
プに併合しなければならない。これは、続いて図9に関
して記述するように、相関オブジェクトの第二のグルー
プ211に関する「グループロック・ポインタ」オブジ
ェクト231の値を、「第一グループロック」オブジェ
クト223を指すよう変更することにより、達成され
る。当業者は、オブジェクトコレクションの中には普通
二グループ以上の相関オブジェクトがあることを理解す
るであろう。
【0027】図5は、一つの実施例に用いられた、符号
300であらわされる、ロッキング・データ構造を示
す。ロッキング・データ構造300には、「参照ロッ
ク」オブジェクト301、「グループロック」オブジェ
クト303、「ロックオブジェクト」ポインタ305及
び「参照カウント」フィールド306を含む「グループ
ロック・ポインタ」オブジェクト304及びロック可能
オブジェクト307が含まれる。「参照ロック」オブジ
ェクト301は、続いて記述するグループロックリンケ
ージへの排他的アクセスを用意するために使用される。
オブジェクトコレクションは一個以上の関連「グループ
ロック」オブジェクト303を有してもよい。オブジェ
クトコレクション内の各グループに相関オブジェクトが
含まれており、これらは相関オブジェクトのいずれかに
アクセスする前にまとめてロックしなければならない。
こうして、オブジェクトコレクション内の各グループ
は、別々のスレッドにより独立にアクセスできる。「グ
ループロック・ポインタ」オブジェクト304には、
「グループロック」オブジェクト303への「ロックオ
ブジェクト」ポインタ305が含まれる。オブジェクト
コレクションの中の各相関オブジェクトには、「グルー
プロック・ポインタ」オブジェクト304が含まれ、こ
れがそのグループに関する「グループロック」オブジェ
クト303を指す。こうして、各オブジェクトを横切っ
てそのポインタを更新する代わりに、「ロックオブジェ
クト」ポインタ305の既存の値を新しい「グループロ
ック」オブジェクトへのポインタに置き換えることによ
り、グループ内の各相関オブジェクトを異なる「グルー
プロック」オブジェクト303に割り当てることができ
る。ロック可能オブジェクト307はオブジェクトコレ
クション内のオブジェクトである。一つの好適実施例に
おいては、「参照ロック」オブジェクト301、「グル
ープロック」オブジェクト303及び「グループロック
・ポインタ」オブジェクト304は、オブジェクトコレ
クション内に含まれていない。
【0028】「参照ロック」オブジェクト301には、
「参照ロック」ミューテックス309及びスレッドアク
セス順序化のため良く知られた技術を用いる条件変数3
11が含まれる。「参照ロック」オブジェクト301
は、グループロック・リンケージへの排他的アクセスを
得るために用いられる。「参照ロック」オブジェクト3
01には、「最大ロックオブジェクトID」フィールド
313もまた含まれ、これにはロックオブジェクトを唯
一つ識別するために用いる単調に増加する値が含まれて
いる。「参照ロック」オブジェクト301には、「参照
ロック」オブジェクト301のための関数性を備えたプ
ログラムメソッドもまた含まれる。プログラムメソッド
には、「lockRefCreator」プログラムメソッド315、
「waitForLockObjUnlock」プログラムメソッド317、
および「signalUnlock」プログラムメソッド319が含
まれている。「lockRefCreator」プログラムメソッド3
15は、オブジェクトコレクション内の独立オブジェク
トが別のオブジェクトと相関関係を持つようになったと
き、新しい「グループロック」オブジェクト303を作
る。「lockRefCreator」プログラムメソッド315はま
た、新たに出来た「グループロック」オブジェクト30
3の中で「最大ロックオブジェクトID」フィールド31
3の値を増分して記憶する。「waitForLockObjUnlock」
プログラムメソッド317は、スレッド化されたプロシ
ージャにより呼び出されて、オブジェクトコレクション
への排他的アクセスを要求し、最終的にはその要求スレ
ッドに「参照ロック」ミューテックス309及びオブジ
ェクトコレクション内のリンケージへの排他的アクセス
を受け取らせる。「signalUnlock」プログラムメソッド
319は、スレッドがもはやオブジェクトコレクション
内のリンケージへの排他的アクセスを必要としないこと
を示す「参照ロック」ミューテックス309の解放を合
図するため呼び出される。
【0029】「グループロック」オブジェクト303に
は、相関オブジェクトのグループへのスレッドアクセス
順序化のため用いられるグループロック・ミューテック
ス321が含まれる。「グループロック」オブジェクト
303にアクセスするには、プログラムが先ず「参照ロ
ック」オブジェクト301を取得しなければならない。
「グループロック」オブジェクト303にはまた、「グ
ループロック」オブジェクト303が制御するオブジェ
クトコレクションの中のオブジェクト数を収容する「参
照数」フィールド323も含まれる。当業者は、「参照
数」フィールド323及び「参照カウント」フィールド
306はそれぞれ、「グループロック」オブジェクト3
03及び「グループロック・ポインタ」オブジェクト3
04が不要になった時期を判定するために用いられるこ
とを理解するであろう。「グループロック」オブジェク
ト303には、前述したような「lockRefCreator」プロ
グラムメソッド315が発生する単調増加される識別値
を収容する「グループロック識別」フィールド325も
また含まれる。「グループロック」オブジェクト303
にはまた、「参照ロック」オブジェクト301へのポイ
ンタを収容する「参照ロック・ポインタ」フィールド3
27も含まれる。加えて、「グループロック」オブジェ
クト303には、「グループロック」オブジェクト30
3を参照する各「グループロック・ポインタ」オブジェ
クト304へのポインタを作成するかまたはそれにリン
クする「参照ポインタ」記憶域328が含まれる。
【0030】ロック可能オブジェクト307は、オブジ
ェクトコレクションの中のオブジェクトの一つである。
プログラムは、(無制限で)サービスを実行するかまた
はプログラムに情報を提供するためオブジェクトコレク
ション内に常駐するオブジェクトを使用する。ロック可
能オブジェクト307には、ロック可能オブジェクト3
07をロックするため用いることのできるオブジェクト
ロックミューテックス329が含まれる。ロック可能オ
ブジェクト307にはまた、相関オブジェクトのグルー
プに属する「グループロック・ポインタ」オブジェクト
304へのポインタを収容する「グループ参照ポイン
タ」フィールド331も含まれる。ロック可能オブジェ
クト307にはまた、ロック可能オブジェクト307に
相互関連するオブジェクトへのポインタのための記憶を
作りまたはそれにリンクする「相関オブジェクトへのポ
インタ」記憶域333も含まれる。こうして、一つのグ
ループが、ロック可能オブジェクト307の第一及び第
二インスタンスの双方を含んでいるときは、それぞれが
それぞれの「相関オブジェクトへのポインタ」記憶域3
33に記憶されたポインタを通じて他のオブジェクトへ
のポインタを参照する。ロック可能オブジェクト307
にはまた、「オブジェクトデータとプログラムメソッ
ド」記憶域335も含まれ、これは、オブジェクト指向
システムにおいて、オブジェクト・インスタンス変数及
びオブジェクトのプログラムメソッドへのアクセス手段
を含む。
【0031】「参照ロック」オブジェクト301は、
「参照ロック」オブジェクト301を取得したスレッド
がこれらのグループロック・リンケージへの排他的アク
セスを有するよう、「グループロック」オブジェクト3
03、「ロックオブジェクト」ポインタ305、及び
「グループ参照ポインタ」フィールド331を保護す
る。
【0032】当業者は、ロッキング・データ構造300
はオブジェクト指向方法で実装する必要はないこと及び
前述の関係と能力を実行するため在来のプロシージャ的
データ構成技術を用いることができることを理解するで
あろう。
【0033】図6は、符号400であらわされる、オブ
ジェクトロック処理を示し、オブジェクトコレクション
内の対象オブジェクトをロックするために用いられるス
テップを示す。処理400は「スタート」端子401で
始まり、「参照ロックをロック」手順403に続く。
「参照ロックをロック」手順403は、「参照ロック」
オブジェクト301の中の「参照ロック」ミューテック
ス309をロックして、ロック可能オブジェクト307
のような対象オブジェクトへのアクセスに先立って、オ
ブジェクトコレクション(例えば、「グループロック」
オブジェクト303)の中のグループロック・リンケー
ジへの排他的スレッドアクセスを取得する。スレッドが
「参照ロック」ミューテックス309を取得すると、オ
ブジェクトコレクションの中のグループ及びオブジェク
トの相関関係は他のスレッドによるアクセスから保護さ
れる。これらの相関関係が他のスレッドから保護される
と、現行スレッドは相関関係を変更することができる。
次に処理400は、対象オブジェクトのオブジェクトロ
ック・ミューテックス329を取得する「オブジェクト
をロック」手順405に続く。次いで「オブジェクト相
関」判定手順407が、アクセスしようとするロック可
能オブジェクト307(対象オブジェクト)が他のオブ
ジェクトに相関しているかそれとも他のオブジェクトと
は独立であるかを判定する。この判定はロック可能オブ
ジェクト307の中で「グループ参照ポインタ」フィー
ルド331を検査することにより行われる。「グループ
参照ポインタ」フィールド331の値が「オブジェクト
をロック」ポインタ305へのポインタを含んでいない
ときは、ロック可能オブジェクト307はオブジェクト
コレクションの中の他のオブジェクトとは独立である。
ロック可能オブジェクト307が独立でなければ、処理
400は、グループロック・ミューテックス321を取
得する「グループをロック」手順409に続く。次いで
処理400は、「参照ロックのロックを解除」手順41
1に続く。「参照ロックのロックを解除」手順411は
また、「オブジェクト相関」判定手順407が対象オブ
ジェクトが独立であると判定したときは、直接実行され
る。「参照ロックのロックを解除」手順411は、「参
照ロック」ミューテックス309のロックを解除する。
次に処理400は、対象オブジェクトに望みの演算を実
行する「オブジェクトに対する演算」手順413に続
く。演算が完了すると、処理400は、「参照ロック」
ミューテックス309を再度ロックして他のスレッドが
オブジェクトコレクション内のグループロック・リンケ
ージを変更するのを防止する「参照ロックをロック」手
順415に続く。次に、「オブジェクト相関」判定手順
417が再度、対象オブジェクトが独立かまたは他のオ
ブジェクトと相関しているか否かを点検して判定する。
対象オブジェクトが相関しているときは、「グループを
ロック」手順409によりロックされたグループを「グ
ループのロックを解除」手順419が解放する。グルー
プのロックが解除されたとき、または対象オブジェクト
が独立であったときは、処理400は、「オブジェクト
をロック」手順405により取得したオブジェクトロッ
ク・ミューテックスを解放する「オブジェクトのロック
を解除」手順421に続く。対象オブジェクトのロック
が解除されると、処理400は、「参照ロックをロッ
ク」手順415によりロックされた「参照ロック」ミュ
ーテックス309のロックを解除する「参照ロックのロ
ックを解除」手順423に続く。処理400は「エン
ド」端末425を通じて完了する。
【0034】当業者は、「参照ロック」オブジェクト3
01は、オブジェクトコレクション内でオブジェクトの
グループの間の関係を変更する他のスレッドに対する遅
延を最小にするため、極めて短時間だけロックされるこ
とを理解するであろう。
【0035】図7は、符号500であらわされる、挿入
とロック処理を図示する。これは対象オブジェクトが他
のオブジェクトに相互に関連しているかも知れない場合
に対象オブジェクトをオブジェクトコレクションに挿入
する。挿入とロック処理500は「スタート」端末50
1で始まり「参照ロックをロック」手順503に続く。
「参照ロックをロック」手順503は、「参照ロック」
オブジェクト301をロックする。「参照ロック」オブ
ジェクト301がロックされると、挿入とロック処理5
00は「対象オブジェクトはグループ内」判定手順50
5において、対象オブジェクトが独立かまたはグループ
に割り当てられているかを判定する。判定は対象オブジ
ェクト内の「グループ参照ポインタ」フィールド331
を検査して行われる。「グループ参照ポインタ」フィー
ルド331がNULLであるときは、対象オブジェクト
は独立である。そうでないときは、対象オブジェクトは
いずれかのグループに属する。対象オブジェクトが既に
グループに属しているとき挿入とロック処理500は、
「グループをロック」手順507に続き、グループロッ
ク・ミューテックス321をロックすることにより対象
オブジェクトを含む「グループロック」オブジェクト3
03をロックする。次に「参照ロックのロックを解除」
手順511が「参照ロック」オブジェクト301を解放
し、他のスレッドが他のグループ内のオブジェクトの間
のリンケージを取り扱うことができるようにする。挿入
とロック処理500は「エンド」端末513を通じて完
了する。
【0036】しかし、「対象オブジェクトはグループ
内」判定手順505が、対象オブジェクトがいずれかの
グループ内に含まれていないと判定したとき、挿入とロ
ック処理500は「グループ参照ポインタを収集」手順
515に続く。「グループ参照ポインタを収集」手順5
15は、グループ参照ポインタを対象オブジェクトに相
互に関連する各オブジェクトから収集する。次に「グル
ープ参照ポインタはすべてNULL」判定手順517が
相関オブジェクト内のグループ参照ポインタがすべてN
ULLか否かを判定する。すべてのグループ参照ポイン
タがNULLであるときは、対象オブジェクトもいずれ
のその相関オブジェクトもグループには割り当てられて
いない。こうして、挿入とロック処理500は、「新グ
ループ作成」手順519に進み、新しいグループを作
る。新しいグループが作成されると、挿入とロック処理
500は「対象オブジェクトを新規または選択グループ
(割当てグループ)に割り当て」手順521に続く。
「対象オブジェクトを新規または選択グループ(割当て
グループ)に割り当て」手順521については後述す
る。
【0037】しかし、「グループ参照ポインタはすべて
NULL」判定手順517が非NULLグループを見出
したときは(相関オブジェクトの一つが既にグループの
一部であることを意味する)、挿入とロック処理500
は「グループ選択」手順523に進む。「グループ選
択」手順523は、「グループ参照ポインタを収集」手
順515で集めたグループ参照ポインタから任意のグル
ープを選ぶ。挿入とロック処理500は次いで、「対象
オブジェクトをグループに割り当て」手順521に続
く。「対象オブジェクトをグループに割り当て」手順5
21は、「新グループ作成」手順519により作られた
新規グループか、もしくは「グループ選択」手順523
により選択されたグループのいずれかにグループを割り
当てる。このグループはここで「割当てグループ」と名
付けられる。次に、挿入とロック処理500は、図8の
挿入とロック処理500につながる「AAへ」端末52
7に続く。
【0038】図8は、符号560であらわされる、挿入
とロック処理の続きを示す。これは図7の挿入とロック
処理の続きである。挿入とロック処理は「AA続き」端
末561で「AAへ」端末527から続く。挿入とロッ
ク処理は、「相関オブジェクトを繰り返す」手順563
に続き、各相関オブジェクトから各グループ参照ポイン
タを繰り返す。各グループ参照ポインタを繰り返すと
き、挿入とロック処理は、グループ参照ポインタがNU
LLであるか否かを判定する「グループ参照ポインタは
NULL」判定手順565に続く。グループ参照ポイン
タがNULLであるときは、関連するオブジェクトはグ
ル−プに割り当てられていない。こうして、「割当てグ
ループにオブジェクトを割り当て」手順569が、関連
オブジェクトの「グループ参照ポインタ」フィールド3
31が、対象オブジェクトに割り当てられたグループの
ための「グループロック・ポインタ」オブジェクト30
4を指すよう、設定する。次いで、挿入とロック処理は
「相関オブジェクトを繰り返し」手順563に続き、他
のグループ参照ポインタを繰り返す。
【0039】しかし、「グループ参照ポインタはNUL
L」判定手順565において、グループ参照ポインタが
NULLでないときは、挿入とロック処理は、「グルー
プは割当てグループ」判定手順571に続き、相関オブ
ジェクトに関連するグループは対象オブジェクトに割り
当てられたグループと同じグループであるか否かを判定
する。次に挿入とロック処理は「相関オブジェクトを繰
り返し」手順563に続き、他のグループ参照ポインタ
を繰り返す。
【0040】しかし、グループ参照ポインタがNULL
でなく、かつ割当てグループと同一でないときは、挿入
とロック処理は、図9に従って後述する「割当てグルー
プと参照グループを併合」手順573に続き、二つのグ
ループを併合する。二つのグループが併合されると、
「繰り返しをリセット」手順574が、「相関オブジェ
クトを繰り返し」手順563を、新しく併合されたグル
ープからのすべてのグループ参照ポインタが繰り返され
るよう、リセットする。こうして、「割当てグループと
参照グループを併合」手順573が、再度呼び出されて
他のグループを今併合したグループに併合する。
【0041】「相関オブジェクトを繰り返し」手順56
3が完了すると、挿入とロック処理は、対象グループに
割り当てられたグループをロックする「割当てグループ
をロック」手順575に続く。グループがロックされる
と、「相関オブジェクトの参照を解放」手順577が、
再度非NULLグループポインタのリスト全体を繰り返
して各グループを解放する。該当するグループが解放さ
れると、「参照ロックのロックを解除」手順581が再
度「参照ロック」オブジェクト301のロックを解除す
る。次いで、挿入とロック処理は「エンド」端末583
で完了し対象オブジェクトを含むロックされ割り当てら
れたグループに戻る。
【0042】図9は、相互に関連付けられるようになっ
た二つのグループを併合するための、符号600であら
わされた、グループ併合処理を図示する。グループ併合
処理600は、図8の「割当てグループと参照グループ
を併合」手順573により呼び出され、「スタート」端
末601で始まる。次いでグループ併合処理600は、
「古いグループをロック」手順603に続き、「グルー
プロック識別」フィールド325内で低い識別値を有す
るグループをロックする。良く知られたロック手順につ
いては、続いて図10及び図11に沿って記述する。次
に、「ロック点検」判定手順605が、古いグループが
ロックされている間に他のスレッドにより関係リンケー
ジが変更されたか否かを判定する。関係リンケージが変
更されていれば、グループ併合処理600は、「古いグ
ループのロックを解除」手順607に続き、古いグルー
プのロックを解除する。この場合グループ併合処理60
0は「エンド」端末609を通じて完了する。当業者
は、「割当てグループと参照グループを併合」手順57
3の後には常に「繰り返しをリセット」手順574が呼
び出されるので、「古いグループのロックを解除」手順
607を呼び出したロックの不定は続いて再試行される
ことを理解するであろう。
【0043】しかし、「ロック点検」判定手順605に
よる判定で古いグループがロックされていて関係リンケ
ージが不変であるとき、グループ併合処理600は、
「新しいグループをロック」手順611に続き、高い識
別値を持つグループ(新しいグループ)をロックする。
次に、「ロック点検」判定手順613が、新しいグルー
プがロックされている間に他のスレッドにより関係リン
ケージが変更されたか否かを判定する。関係リンケージ
が変更されていなければ、グループ併合処理600は、
「新しいグループを古いグループに併合」手順615に
続き、新しいグループ(大きいグループロック識別値を
有するグループ)のグループ参照を古いグループのグル
ープロック識別値に設定する。次にグループ併合処理6
00は、新しいグループのロックを解除する「新しいグ
ループのロックを解除」手順617及び古いグループの
ロックを解除する「古いグループのロックを解除」手順
619に続く。グループ併合処理600は次いで「エン
ド」端末609を通じて完了する。
【0044】しかし、「ロック点検」判定手順613が
関係リンケージは変更されていると判定したとき、グル
ープ併合処理600は、単に「新しいグループのロック
を解除」手順617、「古いグループのロックを解除」
手順619及び「エンド」端末609を通じて完了す
る。当業者は、「割当てグループと参照グループを併
合」手順573の後には常に「繰り返しをリセット」手
順574が呼び出されるので、「ロック点検」判定手順
613が判定したロックの不定は続いて再試行されるこ
とを理解するであろう。当業者は、デッドロック状態が
起こる可能性を排除するためグループロックを特定の順
序でロックすることが重要であることを理解するであろ
う。
【0045】先行技術のロック処理を説明するのが有用
である。図10は、グループのロックに用いられる符号
700であらわされたグループロック処理を図示する。
グループロック処理700は、「スタート」端末701
で始まり、「ロック試行」手順703に続き、グループ
ロック・ミューテックス321をロックしようと試み
る。グループロックミューテックス321が他のいずれ
かのスレッドによりロックされていなければ、「ロック
試行」手順703はグループロック・ミューテックス3
21を取得する。しかし、「ロック試行」手順703
は、単にグループロックミューテックス321が既にロ
ックされているか否かを返すだけである。それに構わ
ず、「ロック取得」判定手順705が、「ロック試行」
手順703によりグループロック・ミューテックス32
1がうまくロックされたか否かを判定する。グループロ
ック・ミューテックス321がうまくロックされていれ
ば、グループロック処理700は、「エンド」端末70
7を通じて完了する。グループロック・ミューテックス
321が取得されていないと、グループロック処理70
0は、「条件変数上で待つ」手順709に続く。これは
「参照ロック」ミューテックス309のロックを解除し
て、グループロック・ミューテックス321のロックが
解除になったとの属性にしたがって、呼び出したスレッ
ドを休眠させる。属性が満足されると、「参照ロック」
ミューテックス309をロックして現行スレッドが継続
される。現行スレッドが継続されると、グループロック
処理700は、「ロック試行」手順703に続いて、再
度グループロック・ミューテックス321をロックする
試みをする。
【0046】オブジェクトのロックはグループのロック
と同様である。図11は、オブジェクトのロックに用い
られる符号750で示されたオブジェクトロック処理を
図示する。オブジェクトロック処理750は、「スター
ト」端末751で始まり、「ロック試行」手順753に
続き、オブジェクトロック・ミューテックス329をロ
ックしようと試みる。オブジェクトロック・ミューテッ
クス329が他のいずれかのスレッドによりロックされ
ていなければ、「ロック試行」手順753はオブジェク
トロック・ミューテックス329を取得する。しかし、
「ロック試行」手順753は、単にオブジェクトロック
・ミューテックス329が既にロックされているか否か
を返すだけである。それに構わず、「ロック取得」判定
手順755が、「ロック試行」手順753によりオブジ
ェクトロック・ミューテックス329がうまくロックさ
れたか否かを判定する。オブジェクトロック・ミューテ
ックス329がうまくロックされているとオブジェクト
ロック処理750は、「エンド」端末757を通じて完
了する。オブジェクトロック・ミューテックス329が
取得されていないとき、オブジェクトロック処理750
は、「条件変数上で待つ」手順759に続く。これは
「参照ロック」ミューテックス309のロックを解除し
て、オブジェクトロック・ミューテックス329のロッ
クが解除になったとの属性にしたがって呼び出したスレ
ッドを休眠させる。属性が満足されると、「参照ロッ
ク」ミューテックス309をロックして現行スレッドが
継続される。現行スレッドが継続されると、オブジェク
トロック処理750は、「ロック試行」手順753に続
いて、再度オブジェクトロック・ミューテックス329
をロックする試みをする。
【0047】当業者は、本発明は相互に関連するオブジ
ェクトまたはデータ構造の一個以上のグループを対象と
することを理解するであろう。マルチスレッド環境にお
いて、任意の与えられたインスタンスで単一スレッドの
みがグループにアクセスできる。こうして、本発明は、
大きさを最小にしたグループへのスレッドアクセスを順
序化して、相関データ構造のグループを処理するために
使うことのできるスレッドの数を最大にする。
【0048】本発明を現在の好適実施例を用いて記述し
たが、当業者は各種の変更と代替が本発明の範囲を逸脱
することなく行われることを理解するであろう。したが
って、本発明の範囲はここに説明した特定の発明実施例
に限定されるものでなく、特許請求の範囲及びその等価
物によってのみ定義されなければならない。
【0049】
【発明の効果】前述から、本発明は(無限定で)下記の
利点を有していることが認識されるであろう。 1)本発明は、他のスレッドによる中断なしにスレッド
がアクセスする相関オブジェクトのグループを最少にす
る。 2)本発明は、相関オブジェクトのグループを最少にす
ることにより、非相関オブジェクトを不必要にロックし
ないので、スレッドを不必要に阻止しない。 3)本発明は、オブジェクトのグループをオブジェクト
コレクションに併合するための効率的な機構である。
【図面の簡単な説明】
【図1】本発明を好適実施例により使用することのでき
るコンピュータシステムを示す。
【図2】好適実施例による二つのグループを持つオブジ
ェクトコレクションを示す。
【図3】好適実施例によるグループリンケージ構造を示
す。
【図4】好適実施例による併合グループを示す。
【図5】好適実施例によるロックされたデータ構造を示
す。
【図6】好適実施例によるオブジェクトへの排他的スレ
ッドアクセスを得るためのオブジェクトロック手順を示
す。
【図7】好適実施例による挿入とロック手順を示す。
【図8】好適実施例による挿入とロック手順を示す。
【図9】好適実施例によるグループ併合手順を示す。
【図10】先行技術のグループロック手順を示す。
【図11】先行技術のオブジェクトロック手順を示す。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 アレキサンダー・アール・オールソン アメリカ合衆国 94301 カリフォルニア 州 パロアルト テニーソンアヴェニュー 666

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】 オブジェクトコレクション内の対象オブ
    ジェクトを、非相関オブジェクトをロックしたままにす
    ることなく、ロックするためのコンピュータ制御方法で
    あって、前記オブジェクトコレクションがマルチスレッ
    ド計算環境内の一個以上のスレッドによりアクセスさ
    れ、グループロックが前記対象オブジェクトを含む相関
    オブジェクトの対応グループへのスレッドアクセスを制
    御するものにおいて、前記方法が、(A)前記グループ
    ロックが用いる複数のグループロック・リンケージへの
    スレッドアクセスを制御するため、参照ロックを前記オ
    ブジェクトコレクションに関連付けるステップと、
    (B)前記相関オブジェクトの対応グループ内における
    第一のオブジェクトと第二のオブジェクトとの間の関係
    の変化に応じて、前記複数のグループロック・リンケー
    ジを修正するステップと、(C)前記対象オブジェクト
    を含む前記相関オブジェクトの対応グループをロックし
    て、前記対象オブジェクトとその相関オブジェクトとを
    ロックするステップと、の各ステップを含むコンピュー
    タ制御方法。
  2. 【請求項2】 前記ステップ(C)が、(C1)前記参
    照ロックをロックするステップと、(C2)次いで、前
    記相関オブジェクトの対応グループに関連付けられた前
    記グループロックをロックするステップと、(C3)次
    いで、前記参照ロックのロックを解除するステップと、
    を含む請求項1に記載のコンピュータ制御方法。
  3. 【請求項3】 前記相関オブジェクトの対応グループ
    が、第一のグループロックに関連付けられた相関オブジ
    ェクトの第一のグループであり、前記第二のオブジェク
    トが第二のグループロックに関連付けられた相関オブジ
    ェクトの第二のグループに所属しており、ステップ
    (B)がさらに、(B1)前記参照ロックをロックする
    ステップと、(B2)次いで、前記相関オブジェクトの
    第一のグループと前記相関オブジェクトの第二のグルー
    プとを、単一グループロックに関連付けられた相関オブ
    ジェクトの併合グループに併合するステップと、(B
    3)次いで、前記参照ロックのロックを解除するステッ
    プと、を含む請求項1に記載のコンピュータ制御方法。
  4. 【請求項4】 前記第二のオブジェクトが独立であっ
    て、ステップ(B)がさらに、(B1)前記参照ロック
    をロックするステップと、(B2)次いで、前記第二の
    オブジェクトを前記相関オブジェクトの対応グループに
    割り当てるステップと、(B3)次いで、前記参照ロッ
    クのロックを解除するステップと、を含む請求項1に記
    載のコンピュータ制御方法。
  5. 【請求項5】 前記対象オブジェクトが、前記相関オブ
    ジェクトの対応グループと前記グループロックの一つと
    を関連付ける有向無周期的グラフ(DAG)オブジェク
    トである請求項1に記載のコンピュータ制御方法。
  6. 【請求項6】 前記DAGオブジェクトが画像処理演算
    を記述する請求項1に記載のコンピュータ制御方法。
  7. 【請求項7】 中央処理装置(CPU)と前記CPUに
    結合されたメモリとを有する、オブジェクトコレクショ
    ン内の対象オブジェクトを、非相関オブジェクトをロッ
    クしたままにすることなくロックするための装置であっ
    て、前記オブジェクトコレクションがマルチスレッド計
    算環境内の一個以上のスレッドによりアクセスされ、グ
    ループロックが前記対象オブジェクトを含む相関オブジ
    ェクトの対応グループへのスレッドアクセスを制御する
    ものにおいて、前記装置が、 前記グループロックが用いる複数のグループロック・リ
    ンケージへのスレッドアクセスを制御するため、参照ロ
    ックを前記オブジェクトコレクションに関連付けるよう
    構成された参照ロック機構と、 前記相関オブジェクトの対応グループ内の第一のオブジ
    ェクトと第二のオブジェクトとの間の関係を変更するこ
    とによって、前記相関オブジェクトの対応グループを修
    正するよう構成されたグループ修正機構と、 前記対象オブジェクトを含む前記相関オブジェクトの対
    応グループをロックして、前記対象オブジェクトとその
    相関オブジェクトとをロックするよう構成されたグルー
    プロック機構と、を含む装置。
  8. 【請求項8】 前記グループロック機構が、 前記参照ロックをロックするよう構成された参照ロック
    ロック機構と、 前記参照ロックが前記参照ロックロック機構によりロッ
    クされた後、前記相関オブジェクトの対応グループに関
    連付けられた前記グループロックをロックするよう構成
    された対応グループロック機構と、 前記グループロックが前記対応グループロック機構によ
    りロックされた後、前記参照ロックのロックを解除する
    よう構成された参照ロックロック解除機構と、を含む請
    求項7に記載の装置。
  9. 【請求項9】 前記相関オブジェクトの対応グループ
    が、第一のグループロックに関連付けられた相関オブジ
    ェクトの第一のグループであり、前記第二のオブジェク
    トが第二のグループロックに関連付けられた相関オブジ
    ェクトの第二のグループに所属しており、前記グループ
    修正機構がさらに、 前記参照ロックがロックされている間に、相互関連され
    た前記相関オブジェクトの第一のグループと前記相関オ
    ブジェクトの第二のグループとを、単一グループロック
    に関連付けられた相関オブジェクトの併合グループに併
    合するよう構成されたグループ併合機構を含む請求項7
    に記載の装置。
  10. 【請求項10】 前記第二のオブジェクトが独立であっ
    て、前記グループ修正機構がさらに、前記参照ロックが
    ロックされている間に、前記第二のオブジェクトを前記
    相関オブジェクトの対応グループに割り当てるよう構成
    されたグループ割当機構を含む請求項7に記載の装置。
  11. 【請求項11】 前記対象オブジェクトが、前記相関オ
    ブジェクトの対応グループと前記グループロックの一つ
    とを関連付ける有向無周期的グラフ(DAG)オブジェ
    クトである請求項7に記載の装置。
  12. 【請求項12】 前記DAGオブジェクトが画像処理演
    算を記述する請求項7に記載の装置。
  13. 【請求項13】 オブジェクトコレクション内の対象オ
    ブジェクトを、非相関オブジェクトをロックしたままに
    することなく、コンピュータにロックさせるためのコン
    ピュータ読み取り可能コードを実装するコンピュータ利
    用可能記憶媒体であって、前記オブジェクトコレクショ
    ンがマルチスレッド計算環境内の一個以上のスレッドに
    よりアクセスされ、グループロックが前記対象オブジェ
    クトを含む相関オブジェクトの対応グループへのスレッ
    ドアクセスを制御するものにおいて、前記コンピュータ
    読み取り可能コードが、 前記グループロックが用いる複数のグループロック・リ
    ンケージへのスレッドアクセスを制御するため、参照ロ
    ックを前記オブジェクトコレクションに関連付けるよう
    構成された参照ロック機構が、前記コンピュータによっ
    て動作されるよう構成されたコンピュータ読み取り可能
    プログラムコードと、 前記相関オブジェクトの対応グループ内の第一のオブジ
    ェクトと第二のオブジェクトとの間の関係を変更するこ
    とによって、前記相関オブジェクトの対応グループを修
    正するよう構成されたグループ修正機構が、前記コンピ
    ュータによって動作されるよう構成されたコンピュータ
    読み取り可能プログラムコードと、 前記対象オブジェクトを含む前記相関オブジェクトの対
    応グループをロックして、前記対象オブジェクトとその
    相関オブジェクトとをロックするよう構成されたグルー
    プロック機構が、前記コンピュータによって動作される
    よう構成されたコンピュータ読み取り可能プログラムコ
    ードと、を含むコンピュータプログラム製品。
  14. 【請求項14】 前記グループロック機構が、 前記参照ロックをロックするよう構成された参照ロック
    ロック機構が、前記コンピュータによって動作されるよ
    う構成されたコンピュータ読み取り可能プログラムコー
    ドと、 前記参照ロックが参照ロックロック機構によりロックさ
    れた後、前記相関オブジェクトの対応グループに関連付
    けられた前記グループロックをロックするよう構成され
    た対応グループロック機構が、前記コンピュータによっ
    て動作されるよう構成されたコンピュータ読み取り可能
    プログラムコードと、 前記グループロックが前記対応グループロック機構によ
    りロックされた後、前記参照ロックのロックを解除する
    よう構成された参照ロックロック解除機構が、前記コン
    ピュータによって動作されるよう構成されたコンピュー
    タ読み取り可能プログラムコードと、を含む請求項13
    に記載のコンピュータプログラム製品。
  15. 【請求項15】 前記相関オブジェクトの対応グループ
    が、第一のグループロックに関連付けられた相関オブジ
    ェクトの第一のグループであり、前記第二のオブジェク
    トが第二のグループロックに関連付けられた相関オブジ
    ェクトの第二のグループに所属しており、前記グループ
    修正機構がさらに、 前記参照ロックがロックされている間に、相互関連され
    た前記相関オブジェクトの第一のグループと前記相関オ
    ブジェクトの第二のグループとを、単一グループロック
    に関連付けられた相関オブジェクトの併合グループに併
    合するよう構成されたグループ併合機構が、前記コンピ
    ュータによって動作されるよう構成されたコンピュータ
    読み取り可能プログラムコード、を含む請求項13に記
    載のコンピュータプログラム製品。
  16. 【請求項16】 前記第二のオブジェクトが独立であっ
    て、前記グループ修正機構がさらに、前記参照ロックが
    ロックされている間に、前記第二のオブジェクトを前記
    相関オブジェクトの対応グループに割り当てるよう構成
    されたグループ割当機構が、前記コンピュータによって
    動作されるよう構成されたコンピュータ読み取り可能プ
    ログラムコードを含む請求項13に記載のコンピュータ
    プログラム製品。
  17. 【請求項17】 前記対象オブジェクトが、前記相関オ
    ブジェクトの対応グループと前記グループロックの一つ
    とを関連付ける有向無周期的グラフ(DAG)オブジェ
    クトである請求項13に記載のコンピュータプログラム
    製品。
  18. 【請求項18】 前記DAGオブジェクトが画像処理演
    算を記述する請求項13に記載のコンピュータプログラ
    ム製品。
JP11014244A 1998-01-23 1999-01-22 マルチスレッド計算環境内で関連付けられたデ―タ構造をロックするための方法、装置及びコンピュ―タプログラム製品 Pending JPH11259313A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/012,683 US5995998A (en) 1998-01-23 1998-01-23 Method, apparatus and computer program product for locking interrelated data structures in a multi-threaded computing environment
US09/012683 1998-01-23

Publications (1)

Publication Number Publication Date
JPH11259313A true JPH11259313A (ja) 1999-09-24

Family

ID=21756193

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11014244A Pending JPH11259313A (ja) 1998-01-23 1999-01-22 マルチスレッド計算環境内で関連付けられたデ―タ構造をロックするための方法、装置及びコンピュ―タプログラム製品

Country Status (4)

Country Link
US (2) US5995998A (ja)
EP (1) EP0932101B1 (ja)
JP (1) JPH11259313A (ja)
DE (1) DE69926820T2 (ja)

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6289410B1 (en) * 1996-07-18 2001-09-11 Electronic Data Systems Corporation Method and system for maintaining consistency of shared objects based upon instance variable locking
CA2222389A1 (en) * 1997-11-27 1999-05-27 Ibm Canada Limited-Ibm Canada Limitee A mechanism for managing the locking and unlocking of objects in java
US5995998A (en) * 1998-01-23 1999-11-30 Sun Microsystems, Inc. Method, apparatus and computer program product for locking interrelated data structures in a multi-threaded computing environment
US6366946B1 (en) * 1998-12-16 2002-04-02 Microsoft Corporation Critical code processing management
US6898617B2 (en) * 1999-11-18 2005-05-24 International Business Machines Corporation Method, system and program products for managing thread pools of a computing environment to avoid deadlock situations by dynamically altering eligible thread pools
US6742032B1 (en) * 1999-12-17 2004-05-25 Xerox Corporation Method for monitoring and encouraging community activity in a networked environment
US7487152B1 (en) * 2000-05-31 2009-02-03 International Business Machines Corporation Method for efficiently locking resources of a global data repository
US7086053B2 (en) * 2000-06-12 2006-08-01 Sun Microsystems, Inc. Method and apparatus for enabling threads to reach a consistent state without explicit thread suspension
US20030131201A1 (en) * 2000-12-29 2003-07-10 Manoj Khare Mechanism for efficiently supporting the full MESI (modified, exclusive, shared, invalid) protocol in a cache coherent multi-node shared memory system
EP1354411A1 (en) * 2001-01-11 2003-10-22 Koninklijke Philips Electronics N.V. Data compression method with identifier of regressive string reference
US6748470B2 (en) * 2001-11-13 2004-06-08 Microsoft Corporation Method and system for locking multiple resources in a distributed environment
US7028300B2 (en) * 2001-11-13 2006-04-11 Microsoft Corporation Method and system for managing resources in a distributed environment that has an associated object
US7406519B2 (en) 2001-11-13 2008-07-29 Microsoft Corporation Method and system for locking resources in a distributed environment
US20030105871A1 (en) * 2001-11-13 2003-06-05 Microsoft Corporation, Method and system for modifying lock properties in a distributed environment
JP4139613B2 (ja) * 2002-03-18 2008-08-27 株式会社日立製作所 データ処理方法
US7293130B2 (en) 2002-05-29 2007-11-06 Intel Corporation Method and system for a multi-level memory
US7457933B2 (en) * 2002-09-09 2008-11-25 Sap Ag Methods and systems for archiving data
AU2003264264A1 (en) * 2002-09-09 2004-04-30 Sap Aktiengesellschaft Electronic data structure for controlling access to data objects using locks
US20060149696A1 (en) * 2002-09-09 2006-07-06 Thorsten Pferdekaemper Method and systems for controlling access to a data object by means of locks
US7693881B2 (en) * 2002-09-09 2010-04-06 Sap Ag Methods and systems for moving data using locks
US7653667B2 (en) * 2002-09-09 2010-01-26 Sap Ag Methods and systems for data moving using locks
US7756813B2 (en) * 2002-09-09 2010-07-13 Sap Ag Electronic data structure for controlling access to data objects using locks
US7594053B2 (en) * 2003-12-12 2009-09-22 Alcatel-Lucent Usa Inc. Adaptive object level locking
US7539678B2 (en) * 2004-01-30 2009-05-26 Microsoft Corporation Systems and methods for controlling access to an object
US7331010B2 (en) 2004-10-29 2008-02-12 International Business Machines Corporation System, method and storage medium for providing fault detection and correction in a memory subsystem
CN100337204C (zh) * 2004-11-05 2007-09-12 华为技术有限公司 软件在线升级的方法
US7765547B2 (en) 2004-11-24 2010-07-27 Maxim Integrated Products, Inc. Hardware multithreading systems with state registers having thread profiling data
US8802113B2 (en) * 2005-10-27 2014-08-12 University Of Notre Dame Extracellular matrix cancer vaccine adjuvant
US7685392B2 (en) 2005-11-28 2010-03-23 International Business Machines Corporation Providing indeterminate read data latency in a memory system
US8176022B1 (en) * 2006-08-26 2012-05-08 Radames Garcia Locking protocol using dynamic locks and dynamic shared memory
US7870459B2 (en) * 2006-10-23 2011-01-11 International Business Machines Corporation High density high reliability memory module with power gating and a fault tolerant address and command bus
US8914565B2 (en) * 2007-06-08 2014-12-16 Sap Ag Locking or loading an object node
US20100082624A1 (en) * 2008-09-30 2010-04-01 Apple Inc. System and method for categorizing digital media according to calendar events
US20100122253A1 (en) * 2008-11-09 2010-05-13 Mccart Perry Benjamin System, method and computer program product for programming a concurrent software application
US8875107B2 (en) 2009-03-24 2014-10-28 International Business Machines Corporation Component lock tracing by associating component type parameters with particular lock instances
US8595692B2 (en) * 2010-03-22 2013-11-26 International Business Machines Corporation Identifying lock granularization opportunities
JP5843514B2 (ja) * 2011-06-22 2016-01-13 キヤノン株式会社 情報処理装置および制御方法およびプログラム
US8756613B2 (en) * 2011-09-23 2014-06-17 International Business Machines Corporation Scalable, parallel processing of messages while enforcing custom sequencing criteria
US8966491B2 (en) * 2012-04-27 2015-02-24 Oracle International Corporation System and method for implementing NUMA-aware reader-writer locks
US9665403B2 (en) * 2013-03-15 2017-05-30 Miosoft Corporation Executing algorithms in parallel
US9613112B2 (en) 2013-03-15 2017-04-04 Miosoft Corporation Structuring data
US9996402B2 (en) 2014-04-07 2018-06-12 Oracle International Corporation System and method for implementing scalable adaptive reader-writer locks
US10108931B2 (en) * 2014-09-26 2018-10-23 Oracle International Corporation Lock-based updating of a document
US10901807B2 (en) 2019-01-02 2021-01-26 International Business Machines Corporation Computer system with concurrency for multithreaded applications

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5319780A (en) * 1987-10-19 1994-06-07 International Business Machines Corporation System that implicitly locks a subtree or explicitly locks a node based upon whether or not an explicit lock request is issued
JPH0784851A (ja) * 1993-09-13 1995-03-31 Toshiba Corp 共有データ管理方法
GB2301204A (en) * 1995-05-23 1996-11-27 Ibm Collaborative data processing
US5852731A (en) * 1995-06-05 1998-12-22 International Business Machines Corporation Computer program product for synchronizing static variable initialization and reference under a multi-threaded computer environment
US5771382A (en) * 1995-06-05 1998-06-23 International Business Machines Corporation System and method for synchronizing static variable initialization and reference under a multi-threaded computer environment
US5822588A (en) * 1995-06-09 1998-10-13 Sun Microsystem, Inc. System and method for checking the use of synchronization locks in a multi-threaded target program
US5701432A (en) * 1995-10-13 1997-12-23 Sun Microsystems, Inc. Multi-threaded processing system having a cache that is commonly accessible to each thread
US5995998A (en) * 1998-01-23 1999-11-30 Sun Microsystems, Inc. Method, apparatus and computer program product for locking interrelated data structures in a multi-threaded computing environment

Also Published As

Publication number Publication date
EP0932101A2 (en) 1999-07-28
DE69926820T2 (de) 2006-06-29
US5995998A (en) 1999-11-30
US6594683B1 (en) 2003-07-15
EP0932101A3 (en) 2001-11-21
DE69926820D1 (de) 2005-09-29
EP0932101B1 (en) 2005-08-24

Similar Documents

Publication Publication Date Title
JPH11259313A (ja) マルチスレッド計算環境内で関連付けられたデ―タ構造をロックするための方法、装置及びコンピュ―タプログラム製品
Jones Concurrent operations on priority queues
EP0881576B1 (en) Method and apparatus for generational garbage collection in a shared heap memory by means of multiple processor units
US6247025B1 (en) Locking and unlocking mechanism for controlling concurrent access to objects
US7451146B2 (en) Almost non-blocking linked stack implementation
EP0874318B1 (en) A method and apparatus for locating object pointers used within exact garbage collection
US6529982B2 (en) Locking of computer resources
US5404521A (en) Opportunistic task threading in a shared-memory, multi-processor computer system
WO2003060705A2 (en) Lock-free implementation of dynamic-sized shared data structure
JP2500079B2 (ja) プログラムの最適化方法及びコンパイラ・システム
JPH113269A (ja) スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法
WO2000033195A1 (en) Elimination of traps and atomicity in thread synchronization
US7451438B2 (en) Method, system and product for identifying and executing locked read regions and locked write regions in programming languages that offer synchronization without explicit means to distinguish between such regions
JPH07191865A (ja) オペレーティング・システムにおけるインタブロックの分析方法
EP0955584B1 (en) Fast synchronization for programs written in the java programming language
EP0784264B1 (en) A computer-implemented process for determining a minimum code set for an executable application in a data processing system
US6951018B2 (en) Method and apparatus for efficiently tracking monitors
Luchangco et al. On the uncontended complexity of consensus
Michael et al. Relative performance of preemption-safe locking and non-blocking synchronization on multiprogrammed shared memory multiprocessors
US6490609B1 (en) Method, apparatus and computer program product for invoking a thread-unaware routine that uses an operation-dependent temporary data structure
US6055529A (en) Method, apparatus and computer program product for extracting known patterns from a data structure in a single pass
Laneve A lightweight deadlock analysis for programs with threads and reentrant locks
US20040128672A1 (en) Generic program adapting general algorithm as iteration
Herman et al. Space-optimal wait-free queues
Scherer et al. BMP-RAP: Branching Multithreaded Pipeline for Real-time Applications with Pooled Resources