JP4620871B2 - マルチスレッドコンピュータシステムにおけるモニタ変換 - Google Patents
マルチスレッドコンピュータシステムにおけるモニタ変換 Download PDFInfo
- Publication number
- JP4620871B2 JP4620871B2 JP2000601526A JP2000601526A JP4620871B2 JP 4620871 B2 JP4620871 B2 JP 4620871B2 JP 2000601526 A JP2000601526 A JP 2000601526A JP 2000601526 A JP2000601526 A JP 2000601526A JP 4620871 B2 JP4620871 B2 JP 4620871B2
- Authority
- JP
- Japan
- Prior art keywords
- monitor
- thread
- heavyweight
- recursion
- light weight
- 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.)
- Expired - Lifetime
Links
- 238000006243 chemical reaction Methods 0.000 title description 6
- 238000000034 method Methods 0.000 claims description 77
- 230000008569 process Effects 0.000 claims description 42
- 230000006870 function Effects 0.000 claims description 40
- 238000012545 processing Methods 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 7
- 238000012795 verification Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 5
- 230000004913 activation Effects 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 239000000945 filler Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000002860 competitive effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 235000003642 hunger Nutrition 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Testing And Monitoring For Control Systems (AREA)
Description
【発明の属する技術分野】
概して、本発明は、オブジェクトベースのコンピュータシステムにおいてライトウェイトモニタからヘビーウェイトモニタへ変換(変更)するための方法および装置に関するものである。より詳細には、本発明は、オブジェクトベースのコンピュータシステムにおいて、競合オブジェクトと関連付けられたライトウェイトモニタを、対応するヘビーウェイトモニタへアトミックな(atomically)に変換する方法と装置に関するものである。
【0002】
【従来の技術】
オブジェクトベースの環境において、スレッドはしばしばサービスの要求を満たすために使用される。スレッドは資源の記憶領域の「スケッチパッド」のようなものと考えてもよく、本質的には、コンピュータシステム内における制御の1つの連続した流れである。一般に、1スレッド、即ち1つの制御のスレッドは、中央処理装置(CPU)の一連の指示、または、独立して実行され得るプログラム言語の命令文である。各スレッドは、メソッドの起動が存在する固有の実行スタックを有する。当業者には周知のように、メソッドがスレッドに対して起動される場合、起動はスレッドの実行スタック上に「プッシュ」される。そのメソッドが戻ってきた時、または起動されなかった時、起動は実行スタックから「ポップ」される。1メソッドの起動が他のメソッドを起動し得るため、実行スタックは先入れ後出し方式で動作する。
【0003】
オブジェクトベースのプログラムの実行中において、1スレッドは複数のオブジェクトを含む処理を実行しようとするかもしれない。一方、複数のスレッドが1つのオブジェクトを含む処理を実行しようとするかもしれない。特定のオブジェクトをいずれかの時間に含む複数の処理、即ち同期処理のうちの一つを起動することができるのは、一つのスレッドだけであることがしばしばある。つまり、唯一のスレッドがある時間に特定のオブジェクトに関する同期処理を実行することが許可される。同期処理、即ち同期メソッドは以下のことを要求する点でブロック構造である。それは、メソッドを呼び出したスレッドが、メソッドが呼び出されたオブジェクトと共に、最初の同期を行い、メソッドが戻ってきた場合オブジェクトに対して非同期となる。1スレッドを1オブジェクトと同期する場合、一般にオブジェクトに対するアクセスの制御を、メソッドを呼び出す前に同期構造を使用して行うことが要求される。
【0004】
ロック、ミューテック、セマフォ、及びモニタといった同期構造は、共有資源に関する処理をスレッドに許可することが不適切である期間中において、共有資源へのアクセスを制御するために使用される。実例として、1以上のスレッドが任意の特定の時間に1オブジェクトを処理することを防ぐために、オブジェクトはしばしばロックされる。ロックは、オブジェクトのロックの所有権を有している唯一のスレッドに対して、そのオブジェクトにメソッドを実行することを許可するように行われる。
【0005】
典型的に、スレッドが首尾よくオブジェクトのロックを取得することができた場合、スレッドはオブジェクトの同期処理を実行することを許可される。1スレッドが1オブジェクトのロックを有している間、他のスレッドはオブジェクトに対して付加的な同期処理を実行しようとすることが許可されるかもしれない。また、オブジェクトに対して、非同期処理を実行するかもしれない。スレッド同期はスレッドによる1プロセスであり、それは、オブジェクトのロックを有している唯一のスレッドがロックされたオブジェクト上で同期処理を実行している間、オブジェクトがロックされているか否か、オブジェクトの状態をチェックするために相互に影響している。スレッド同期はまたスレッドにオブジェクトロックを取得させたり取り外したりすることを可能とする。
【0006】
スレッドが同期している場合、オブジェクトロックを所有する唯一のスレッドが、ロックされたオブジェクトに対し処理を許可されたことを確認するために、同期構造が一般的に提供される。従来の技術においてこのような同期構造の1つがモニタとして知られている。典型的に、モニタは、ミューテックのような低レベルの原始的な同期を使用することにより実行される。たとえプログラムがどんなオブジェクトに対してもモニタ処理を実行できるとしても、一般に全てのオブジェクトに対するモニタの実装を含めることは多くの空間を必要とし非能率的である。このような同期構造がモニタといわれている。一般に、モニタは、1つのオブジェクトと関連付けられたモニタを有するスレッドだけがそのオブジェクトに対し同期処理を実行可能とするように構成されている。モニタはライトウェイトかヘビーウェイトかのいずれかである。典型的に、ライトウェイトモニタは競合を条件としないオブジェクトに対して適している。一方、ヘビーウェイトモニタは競合モニタ処理を取り扱うために使用されるのが望ましい。
【0007】
ライトウェイトモニタの1つの特定の実施例が「軽いロック:Java用軽量同期」デビッドF.ベーコン他著(1998年)("Thin Locks: Featherweight Synchronization for Java" by David F. Bacon et al)の258−268ページで説明されており、これ全体を援用する。説明のように、ライトウェイトモニタは、ビットで形成され、それはスレッドIDの形式でどのスレッドがライトウェイトモニタを所有し、関連するオブジェクトをロックしているかを識別するためのオブジェクトヘッダを確保する。典型的に、ライトウェイトモニタは競合を条件としないオブジェクトに使用される。例えば、wait、notify、notifyALLという処理はこれらのオブジェクト上では実行されない。図1Aは、オブジェクトヘッダ100及び関連するライトウェイトモニタ102を示す。ライトウェイトモニタ102はスレッドの識別フィールド104を含み(所有者フィールドともいう)、ライトウェイトモニタ102を所有するスレッドのスレッドIDを含んでいる。ライトウェイトモニタ102は、再帰カウンタ106も含み、これは、現在のスレッドがライトウェイトモニタに再エンターした回数を示している。ライトウェイトモニタ102は、ヘビーウェイトモニタフラグが0にセットされた時に、ライトウェイトモニタ102をライトウェイトモニタとして認識するために使用されるヘビーウェイトモニタフラグ108を含む。
【0008】
所有者フィールド104がゼロの状態において、ライトウェイトモニタ102は所有されず、アンロックされる。しかしながら、所有者フィールド104が、ライトウェイトモニタ102を所有する現在のスレッドを表すスレッドIDを含む場合にはそうではない。
【0009】
ライトウェイトモニタにエンターするために、スレッド110は、ライトウェイトモニタ102を含むオブジェクトヘッダ100に対して典型的な比較及びスワップ処理を実行する。比較及びスワップ処理において、比較及びスワップオペレータの新たな値は、スレッド110と関連付けられたスレッドIDであり、比較及びスワップオペレータのコンペランド(comperand)はゼロである。この構成により、仮に比較及びスワップ処理が成功した場合、ライトウェイトモニタ102のスレッドID、再帰カウンタ及び全てのフラグ(ヘビーウェイトモニタフラグ108など)は、初めから全てゼロであり、それは、ライトウェイトモニタ102が所有されておらず、よってアンロックされているということを示す。比較及びスワップ処理が首尾よく完了した後、所有者フィールド104は、スレッド110と関連付けられたスレッドIDを含んでいる。このことは、このスレッド110が、ライトウェイトモニタ102を所有し、ライトウェイトモニタ102がロックされているということを示すものである。
【0010】
スレッドがすでに所有しているモニタ(例えば、スレッドがリエントラントである場合)に、再エンターするような場合には、再エンターしているスレッドは、オーバフローの状態を引き起こすことなく、再帰カウンタ106をまず増分させなければならない。再エンターしているスレッドがオーバフロー状態を引き起こす場合、この再エンターしているスレッドはライトウェイトモニタ102を、システムモニタ116上に生成されているヘビーウェイトモニタ114に変換させなければならない。設計により、システムモニタ116の現在の所有者のみが、ライトウェイトモニタ102をヘビーウェイトモニタ114に変換することができることを留意されたい。典型的に、この変換はオブジェクトヘッダ100に対して、新たに生成されたヘビーウェイトモニタ114に対応するヘビーウェイトモニタポインタが比較及びスワップオペレータの新たな値となり、それと共に比較とスワップ処理が実行されることによって遂行される。このように、比較及びスワップ処理の成功後、オブジェクトヘッダ100はヘビーウェイトモニタポインタを含む。
【0011】
ヘビーウェイトモニタ114は、特定のスレッドがシステムモニタ116に再エンターするたびに毎回更新される再帰カウンタフィールド118を含む。ヘビーウェイトモニタ114はさらに、ヘビーウェイトモニタ所有者フィールド120も含む。システムモニタ116は、システムモニタ116の現在の所有者を表すシステムモニタ所有者フィールド122を含む。システムモニタ116はさらに、enter、exit、wait、及びnotifyといった特定のスレッドの処理を実行するように構成されている。ライトウェイトモニタ102の現在の所有者(即ち、スレッド110)は、ライトウェイトモニタ102からヘビーウェイトモニタ114へ変換することが可能な唯一のスレッドであり、ヘビーウェイトモニタ114及び埋め込まれたシステムモニタ116の所有者は同一、即ちスレッド110でなければならない。
【0012】
ここで、図1Bを参照し、第2のスレッド124が、スレッド110の現在所有するライトウェイトモニタ102にエンターしようとしていると仮定する。前述の通り、スレッド124は比較及びスワップ処理を実行することによりライトウェイトモニタ102にエンターしようとする。しかしこの場合、比較及びスワップ処理は失敗となる。その理由は、所有者フィールド104がスレッド110に対応するスレッドIDを含んでおり、スレッド110がライトウェイトモニタ102を所有していることを示しているからである。この時点において、スレッド124とスレッド110の間において、ライトウェイトモニタ102の所有権に対しての競合が生じる。システムモニタ116の所有者としてのスレッド110のみが、ライトウェイトモニタ102からヘビーウェイトモニタ114へ変換することが可能なので、スレッド124はライトウェイトモニタ102がスレッド110により開放されるまでの間、スピンロックループにエンターする。スピンロックループによって、スレッド110がライトウェイトモニタ102をアンロックするまでの間、スレッド124は待ち行列にエンターすることを意味する。従来の技術では公知のように、一般にスピンロックは、システム資源の非能率的な使用となる部分において望ましくない結果である。スピンロックは、ライトウェイトモニタ102が長時間ロックされることにより、ライトウェイトモニタ102がスピンロックされるまで他のスレッドをwaitさせることを引き起こすという場合において、とりわけ非能率的である。さらに、優先度の高いスレッドと低いスレッドが共にライトウェイトモニタ102に関してスピンロックされるような状況において、優先度の低いスレッドが「待ちわびた(starving)」状態となる可能性がある。
【0013】
従って、求められているものは、オブジェクトベースシステムにおけるモニタの競合を解決するための効果的な方法および装置である。
【0014】
【発明の概要】
概して、本発明は、競合オブジェクトに関連付けられたライトウェイトモニタを効率的にヘビーウェイトモニタへ変換するための改良された方法、装置、およびコンピュータシステムに関する。発明の一側面によると、第2のスレッドによって所有されるオブジェクトに関して同期処理を実行するための第1のスレッドに対して、第1のスレッドは新たなヘビーウェイトモニタを生成し、第2のスレッドを新たに生成されたヘビーウェイトモニタの所有者に設定する。そして、第1のスレッドはヘビーウェイトモニタにエンターする。こうすれば、第2のスレッドがオブジェクトをアンロックするまで、第1のスレッドがスピンロックを行う必要がない。
【0015】
本発明は、方法、コンピュータシステム、および装置を含む種々の形態にて実施され得る。本発明のいくつかの実施の形態が以下に説明される。方法および装置が開示されている。本発明の一側面によれば、第2のスレッドによって所有されるオブジェクトが第1のスレッドに対して利用不能であるときに、ライトウェイトモニタをヘビーウェイトモニタへ変換するためのコンピュータで実行される方法は、ライトウェイトモニタに関連付けられたオブジェクトの所有権を決定する工程を含む。仮に第2のスレッドが該当オブジェクトを所有することが判断された場合、第1のスレッドは新たにヘビーウェイトモニタを生成する。そして、第1のスレッドは、第2のスレッドを新たに生成されたヘビーウェイトモニタの所有者として設定する。次に、第1のスレッドは新たなヘビーウェイトモニタにエンターする。
【0016】
本発明の更に別の側面によれば、コンピュータシステムは、メモリおよび複数のスレッドを含む。また、コンピュータシステムは、メモリに結合されたプロセッサ、およびオブジェクトヘッダを含むオブジェクトを含み、同オブジェクトヘッダはオブジェクトの所有権に関連する情報を含むライトウェイトモニタを含むように構成される。第1のスレッドIDによって指示されたようにオブジェクトをロックしていた、複数のスレッドから選択された第1のスレッドは、ライトウェイトモニタに含まれ、複数のスレッドから選択された第2のスレッドは、オブジェクトが第2のスレッドに対して利用可能である場合、ライトウェイトモニタを対応する第1のスレッドによって所有されたヘビーウェイトモニタに変換するように構成されている。
【0017】
発明の更に別の側面によれば、ライトウェイトモニタを含むオブジェクトヘッダを有するオブジェクトに関する同期処理の実行を第1のスレッドが試行する場合、ライトウェイトモニタをヘビーウェイトモニタに変換するコンピュータプログラム製品が開示されている。
【0018】
コンピュータプログラム製品は、オブジェクトの所有権を決定するとともに、第2のスレッドによってオブジェクトが所有されていると判断される場合にヘビーウェイトモニタを生成し、ヘビーウェイトモニタを第2のスレッドに設定するとともに、第1のスレッドをヘビーウェイトモニタにエンターさせるコンピュータコードと、同コンピュータコードを格納するためのコンピュータ読み取り可能な記録媒体とを含む。
【0019】
本発明のこれら及び他の利点は、以下の詳細な説明を読み、種々の図面を調べることにより明らかになるであろう。
【0020】
【発明の実施の形態】
マルチスレッドのオブジェクトベースコンピュータシステムにおいて、一般に、2以上のスレッドが任意の特定時間に1つのオブジェクトに関する処理を行うことを防止することができるように、オブジェクトは同期構造を備える。
【0021】
本発明で示される一実施の形態においては、広くライトウェイトモニタを用いるシステムが意図されている。第2のスレッドによって既に所有されているライトウェイトモニタへ第1のスレッドがエンターしようとする場合、第1のスレッドはヘビーウェイトモニタを生成し、第2のスレッドをその新たに生成されたヘビーウェイトモニタの所有者として設定する。その後、第1のスレッドは新たに生成されたヘビーウェイトモニタにエンターする。このように、第1のスレッドは、第2のスレッドがライトウェイトモニタを開放するまでwaitすることはない。
【0022】
図2は、本発明の実施の形態に従って、第1のスレッドがオブジェクトの所有権を得るプロセス200を詳しく図示したフローチャートである。プロセス200は、オブジェクトが現在所有されているか否かの判断によって202から開始する。実施例において、オブジェクトヘッダは、所有者フィールドを有するライトウェイトモニタおよびヘビーウェイトモニタフラグを含む。所有者フィールドがゼロであれば、該オブジェクトは非所有であり、それ以外ではオブジェクトは、スレッドによって所有される。そのスレッドのスレッドIDは、所有者フィールドに格納されている。仮に、オブジェクトが所有されていないと判断された場合、204において、要求しているスレッドは、当該オブジェクトに関連付けられたライトウェイトモニタの所有者フィールドに自身のスレッドIDを入力することによりオブジェクトの所有権を得る。
【0023】
しかしながら、202において、オブジェクトが所有されていると判断された場合、オブジェクトヘッダの内容が206において評価される。オブジェクトヘッダが、第1のスレッドのスレッドIDを所有者フィールドに格納するライトウェイトモニタを含む場合には、第1のスレッドが当該オブジェクトに関連付けられたライトウェイトモニタを現在所有している。この場合、第1のスレッドはリエントラントとして参照される。リエントラントであることによるオブジェクトの現在の所有者としての意味は、第1のスレッドがオブジェクトに関連付けられたライトウェイトモニタに再エンターを試行することである。そのような状況は、例えば、スレッドがオブジェクトを開放し、いくらか時間が経過した後に、関連するライトウェイトモニタに再エンターすることによりオブジェクトを再取得する際に生じる。一旦、第1のスレッドが現在のスレッドであると判断されれば、208において、第1のスレッドはライトウェイトモニタに含まれる再帰カウンタを増分することによりライトウェイトモニタに再エンターする。
【0024】
しかしながら、206において、オブジェクトヘッダがヘビーウェイトモニタに対応するヘビーウェイトモニタポインタを含む場合、210において第1のスレッドは対応するヘビーウェイトモニタにエンターする。
【0025】
しかしながら、206において、オブジェクトヘッダが第1のスレッドとは異なる第2のスレッドに対応するスレッドIDを含む場合、ライトウェイトモニタは第2のスレッドによって所有されている。この状況では、当該オブジェクトの所有権に関して、第1のスレッドと第2のスレッドとの間には競合が存在する。本発明の実施の形態では、上記2つのスレッド間の競合を解決するために、第1のスレッドは新たなヘビーウェイトモニタを生成し、212において、新たに生成されたヘビーウェイトモニタの所有者を第2のスレッドに設定する。このように、210において、第2のスレッドが当該オブジェクトに関連付けられたライトウェイトモニタを開放するまでwaitすることなく、第1のスレッドは新たに生成されたヘビーウェイトモニタにエンターすることができる。この方法では、オブジェクトの所有権に関する第1のスレッドおよび第2のスレッド間の競合は、例えば、ライトウェイトモニタが開放されるまで第1のスレッドをスピンロックする必要なく解決される。
【0026】
しかしながら、第1のスレッドがヘビーウェイトモニタを生成するためには、第1のスレッドは新たに生成されたヘビーウェイトモニタに埋め込まれたシステムモニタをまず所有しなければならないことに留意されたい。しかしながら、ライトウェイトモニタからヘビーウェイトモニタへの変換を行うスレッドは、ライトウェイトモニタの所有者である必要がないため、新たに生成されたヘビーウェイトモニタの所有権を第2のスレッドに設定することによって、衝突が起こる可能性が生じる。例として、仮に第1のスレッドがライトウェイトモニタを第2のスレッドによって所有されるヘビーウェイトモニタに変換する場合、システムモニタは第1のスレッドによって所有され、ヘビーウェイトモニタは第2のスレッドによって所有される。この衝突は、212において新たに生成されるヘビーウェイトモニタに含まれるリーエンホルダ(lienholder)フィールドおよびリーエンホルダ再帰フィールドの導入によって解決される。実施例において、リーエンフィールドは、ヘビーウェイトモニタへと変換されたライトウェイトモニタの所有者として第2のスレッドを認識する。
【0027】
図3Aは、本発明の一実施の形態に従うヘビーウェイトモニタ300を図示する。ヘビーウェイトモニタ300は、システムモニタ所有者フィールド304を含むシステムモニタ302上に構築される。ヘビーウェイトモニタは、所有者フィールド306および再帰カウンタフィールド308を含む。実施例において、ヘビーウェイトモニタ200は、またリーエンフィルダ310およびリーエンフィルダ再帰フィールド312を含む。リーエンフィルダフィールド310およびはリーエンフィルダ再帰フィールド312は、ヘビーウェイトモニタから変換されたライトウェイトモニタの所有者および再帰カウントを一時的に保持するために使用される。
【0028】
例として、図3Bは、図2のブロック212において、第1のスレッドによって生成された場合のヘビーウェイトモニタ300を図示する。第1のスレッドがシステムモニタ302を所有するため、システムモニタ所有者フィールド304は、第1のスレッドのスレッドIDを含む。一方、第2のスレッドのスレッドIDは、ヘビーウェイトモニタ所有者フィールド306に格納される。第2のスレッドがヘビーウェイトモニタ300から生成されたライトウェイトモニタを所有していたため、ヘビーウェイトモニタ300の真の所有者は第2のスレッドであり、第1のスレッドではない。好ましい実施の形態では、リーエンフィールド310は、第2のスレッドのスレッドIDを含み、それによりヘビーウェイトモニタ300の真の所有者の識別情報を保存する。
【0029】
図4は、本発明の一実施の形態に従って、第1のスレッドがオブジェクトの所有権を得るプロセス400である。プロセス400は、プロセス200のとり得る実施の形態のほんの一例にすぎず、402において、オブジェクトが所有されているかを第1のスレッドによって判断することによって開始することに留意されたい。実施例において、オブジェクトの所有権は、オブジェクトヘッダに含まれるライトウェイトモニタに対してアトミックなコンペアアンドスワップ処理を実行することによって判断される。上述したように、アトミックなコンペアアンドスワップ処理は、コンペランド(comperand)値が「0」を示すため、成功したコンペアアンドスワップ処理ではオブジェクトが非所有であり、ライトウェイトモニタ内の全てのデータフィールドが「0」を示す。
【0030】
404において、仮に、アトミックなコンペアアンドスワップ処理が成功であると判断された場合、オブジェクトは非所有であったことになり、現在は第1のスレッドによって所有されていることになる。しかしながら、アトミックなコンペアアンドスワップ処理が成功しなかったと判断された場合、ライトウェイトモニタの少なくとも1つのフィールドはゼロではなかったことになる。この場合、406において、比較およびスワップ処理が失敗した理由を判断するためにオブジェクトヘッダの評価が行われる。
【0031】
406において、オブジェクトヘッダが第1のスレッドのスレッドIDを含むライトウェイトモニタを含む場合、第1のスレッドがライトウェイトモニタの現在の所有者であり、それにより第1のスレッドはリエントラントであると考慮される。この場合、408における判断は、ライトウェイトモニタに含まれる再帰カウンタの増分がオーバーフロー状態を招く結果となるか否かによってなされる。再帰カウンタの増分がオーバーフロー状態を招く結果とならない場合、410において、ライトウェイトモニタの再帰カウンタは適切に増分される。一旦、増分カウンタが適切に増分された場合、一実施の形態において、412において、第1のスレッドは、増分された再帰カウンタのアトミックなコンペアアンドスワップをオブジェクトヘッダに対して実行することによってライトウェイトモニタに再エンターする。
【0032】
408に戻り、再帰カウンタの増分がオーバーフロー状態を招く結果となる場合、414において、第1のスレッドは新たなヘビーウェイトモニタを生成する。
【0033】
406に戻り、オブジェクトヘッダが、現在第1のスレッドとは異なる第2のスレッドによって所有されているライトウェイトモニタを含む場合、414において、第1のスレッドは新たなヘビーウェイトモニタを生成する。416において、リーエンホルダは、現在のライトウェイトモニタの所有者(例えば、第2のスレッド)に設定され、リーエンホルダ再帰カウンタは現在の再帰カウンタに設定される。そして、418において、アトミックなコンペアアンドスワップ処理が実行される。この方法によれば、新たに生成されたヘビーウェイトモニタに対応するヘビーウェイトモニタポインタはオブジェクトヘッダに挿入される。仮に、420において、アトミックなコンペアアンドスワップ処理が成功ではないと判断された場合、新たに生成されたヘビーウェイトモニタは422において削除され、新たなヘビーウェイトモニタが414において生成される。アトミックなコンペアアンドスワップ処理は、例えば、アトミックなコンペアアンドスワップ処理が行われる前に、第3のスレッドがヘビーウェイトモニタの所有権を取得した場合に失敗することがある。
【0034】
しかしながら、アトミックなコンペアアンドスワップ処理が成功した場合、424において、第1のスレッドは、オブジェクトヘッダ内に含まれるヘビーウェイトモニタポインタに対応するヘビーウェイトモニタに埋め込まれたシステムモニタにエンターする。この時点で、第1のスレッドは、オブジェクトヘッダ内に含まれたヘビーウェイトモニタポインタに対応するヘビーウェイトモニタに埋め込まれたシステムモニタへのエンターを果たす。しかしながら、今、システムモニタ所有者およびヘビーウェイトモニタ所有者が1つで、かつ同一であることを確かにする必要がある。
【0035】
図5は、本発明の一実施の形態に従って、第1のスレッドがヘビーウェイトモニタにエンターするプロセス500を詳しく図示したフローチャートである。プロセス500は、プロセス400の424へエンターする一実施の形態であることに留意されたい。より詳しくは、プロセス500は、リーエンホルダが存在するか否かの判断がなされる502において開始する。一実施の形態において、リーエンホルダが存在するか否かの判断は、リーエンホルダフィールドが非ゼロの値を含むかどうかの判断によって遂行される。リーエンホルダフィールドが「0」である場合、リーエンホルダは存在せず、それ以外の場合にはリーエンホルダは、リーエンホルダフィールドに含まれるスレッドIDによって示されるスレッドである。リーエンホルダが存在しない場合(例えば、リーエンホルダフィールドがゼロである)、ヘビーウェイトモニタの所有者フィールドは現在のスレッドIDに設定され、ヘビーウェイト再帰カウンタは、504において1だけ増分された現在の再帰カウンタに設定される。再帰カウンタは、システムモニタへのエンターを補償するために増分される。
【0036】
しかしながら、502において、リーエンホルダが存在すると判断された場合、506において、リーエンホルダが現在のスレッドであるか否かの判断がなされる。一実施の形態において、リーエンホルダの識別は、リーエンホルダフィールドの内容を読むこと、および同フィールドに含まれるスレッドIDを判断することによて遂行される。仮に、現在のスレッドがリーエンホルダスレッドではない場合、508において、システムwaitを呼び出すことにより、リーエンホルダスレッドに対してモニタ所有者を譲らなければならない。リーエンホルダスレッドがモニタ所有者を取り戻した後、現在のスレッドはリーエンホルダスレッドによって立ち上げられることになる。
【0037】
506において、現在のスレッドがリーエンホルダであると判断された場合、510において、ヘビーウェイトモニタが更新される。一実施の形態において、ヘビーウェイトモニタは現在のリーエンホルダフィールドを「0」に再設定することによって更新される。また、ヘビーウェイトモニタの更新は、ヘビーウェイトモニタの所有者フィールドを現在のスレッドに対応するスレッドIDに設定することを含む。実施例において、リーエンホルダ再帰フィールドは、現在のモニタエンター処理を考慮して1だけ増分される。そして、増分されたリーエンホルダ再帰フィールドがゼロにリセットされた後に、ヘビーウェイトモニタ再帰フィールドは、リーエンホルダフィールドの増分された値に設定される。ヘビーウェイトモニタが更新された後、512において、システムモニタはnotifyALLを広める。notifyALLは、508において、待ち行列に含まれるスレッドを立ち上げる。そして、それらスレッドは、502へ戻ることによって更なる処理のために行列にwaitする。
【0038】
図6は、本発明の一実施の形態に従う、エンターモニタ機能500および種々の他のモニタ機能の関係600を図示する。実施例において、所有者確認機能602は、現在のスレッドがヘビーウェイトモニタを所有することを確実とする。仮に、所有者確認機能602が、現在のスレッドがヘビーウェイトモニタを所有していないと判断した場合、エラーメッセージが呼び出され、それ以外の場合には、所有者確認機能は成功し、制御が選択されたモニタ機能へ渡される。そのようなモニタ機能は、604におけるwait、606におけるexit、そして608におけるnotify(または、notifyALL)を含む。
【0039】
図7は、本発明の一実施の形態に従って、所有者確認機能700を詳しく図示したフローチャートである。所有者確認機能700は、所有者確認機能602のとり得る実施の形態の一例にすぎないことに留意されたい。より詳しくは、所有者確認機能700は、現在のスレッドがヘビーウェイトモニタを所有するかを判断することによって702から開始する。現在のスレッドがヘビーウェイトモニタを所有している場合、ヘビーウェイトモニタ所有者が確かめられる。しかしながら、現在のスレッドがヘビーウェイトモニタを所有していない場合、704において、現在のスレッドがリーエンホルダであるかが判断される。仮に、現在のスレッドがリーエンホルダではない場合、エラーメッセージが渡され、それ以外の場合には、706においてスレッドがヘビーウェイトモニタにエンターする。一実施の形態において、706へのエンターは、424へのエンターとして実施されていることに留意されたい。一旦、現在のスレッドが首尾よくヘビーウェイトモニタにエンターした場合、再帰カウンタが706へのエンターを考慮して減少される。この時点において、ヘビーウェイトモニタの所有権は確かめられる。
【0040】
図8は、本発明の一実施の形態に従うモニタwait処理800を詳しく図示したフローチャートである。モニタwait処理800は、モニタwait処理604のとり得る実施の形態の一例である。モニタwait処理800は、602における所有者確認機能が成功した後にのみ開始することに留意されたい。より詳しくは、モニタwait処理800は、現在の所有者および再帰カウントを保存することによって802から開始する。一旦、保存されると、804において、所有者および再帰カウントはゼロに設定され、モニタを非所有に設定する。一旦、モニタが非所有となると、806において、ヘビーウェイトモニタを開放するシステムモニタwaitが呼ばれる。一旦、システムモニタwaitが、notifyまたはnotifyALLの発行によって完了すると、例えば、808において、現在のヘビーウェイトモニタの所有者の認識情報が再設定される。一実施の形態において、認識情報は、802において保存された現在の所有者および現在の再帰を検索し、ヘビーウェイトモニタの現在の所有者フィールドおよび現在の再帰フィールドのそれぞれに入力することによって再設定される。
【0041】
図9は、本発明の一実施の形態に従うexit機能900を詳しく図示したフローチャートである。exit機能900は、exit機能606のとり得る実施の形態の一例であることに留意されたい。より詳しくは、exit機能900は、現在のスレッドがヘビーウェイトモニタの所有者であるかを判断することによって902から開始する。仮に、現在のスレッドがヘビーウェイトモニタの所有者である場合、904において、再帰レベルが1であると判断される。仮に、再帰レベルが1である場合、所有者フィールドは「0」に設定され、再帰カウントは「0」に設定され、そして906において、システムモニタはexitする。しかしながら、仮に、904において、再帰カウントが「1」ではなかったと判断された場合、908において、再帰カウンタは減少され、システムモニタはexitする。何れの場合においても、exit機能は首尾よく行われる。
【0042】
902に戻り、仮に、現在のスレッドがヘビーウェイトモニタの所有者ではない場合、910において、現在のヘビーウェイトモニタ所有者がリーエンホルダであるかの判断が行われる。そうではない場合、エラーメッセージが呼ばれる。一実施の形態において、容認し難いが対応するエンター処理がないままにexitが呼ばれる。しかしながら、仮に、現在のヘビーウェイトモニタ所有者がリーエンホルダである場合、912において、リーエンホルダスレッドはヘビーウェイトモニタにエンターする。実施例において、912におけるエンターは、414におけるエンターとして実施されている。一旦、リーエンホルダスレッドが首尾よくヘビーウェイトモニタにエンターすると、再帰カウンタは、912におけるエンターを補償するために減少される。この時点において、exit機能は首尾よく行われる。
【0043】
図10は、本発明の一実施の形態に従うnotify(または、notifyALL)機能1000を詳しく図示したフローチャートである。notify(または、notifyALL)機能1000は、notify(または、notifyALL)機能608のとり得る実施の形態の一例である。notify(または、notifyALL)機能1000は、602における所有者確認機能が首尾よく行われた後のみに開始する。より詳しくは、notify(または、notifyALL)機能1000は、システムモニタ上のnotify(または、notifyALL)を呼び出して1002から開始する。
【0044】
図11は、本発明を実施するのに好適な、一般的な汎用コンピュータシステム1100を図示する。コンピュータシステム1100は、主記憶装置1104(一般に、読み出し専用メモリ、即ちROM)、または主記憶装置1106(一般に、ランダムアクセスメモリ、即ちRAM)を含む記憶装置に結合された任意の数のプロセッサ1102(また中央処理装置として参照される、即ちCPU)を含む。
【0045】
コンピュータシステム1100、即ちより詳しくはCPU1102は、当業者によって認識されるように、仮想マシンをサポートするように構成されてもよい。コンピュータシステム1100でサポートされる仮想マシンの一例を、図7を参照して以下に説明する。当業者に公知のように、ROMは一般にデータおよび命令を単方向にてCPU1102へ転送するように動作するのに対して、RAMは一般にデータおよび命令を双方向にて転送するために使用される。主記憶装置1104,1106の双方は、任意の好適なコンピュータ読み出し可能な記録媒体を含んでもよい。一般に、大容量の装置である補助記憶媒体1108もまたCPU1102と双方向で結合され、付加的なデータ記憶容量を提供する。大容量記憶装置1108は、コンピュータコード、データなどを含むプログラムを格納するために使用されてもよい。一般に、大容量記憶装置1108は、主記憶装置1104,1106よりも一般に低速なハードディスク、またはテープのような記憶媒体である。大容量記憶装置1108は、磁気または紙テープリーダあるいは何らかの公知の装置の形態をとってもよい。大容量記憶装置1108に格納される情報は、適切な場合において、仮想メモリとしてRAM1106の一部とするような標準的な方法にて組み込まれてもよい。CD−ROMのような具体的な主記憶装置1104もまた、単方向にてCPU1102へデータを渡す。
また、CPU1102は、限定されるわけではないが、ビデオモニタ、トラックボール、マウス、キーボード、マイクロホン、タッチディスプレイ、変換カード読取装置、磁気または紙テープ読取装置、タブレット、スタイラス、音声または手書き文字認識装置、あるいはコンピュータのような他の公知の入力装置などの装置を含む1つ以上の入出力装置1110に結合されてもよい。最後に、CPU1102は、コンピュータまたは遠距離通信ネットワーク、例えば、インターネットネットワークまたはイントラネットネットワークに1112に一般的に図示されるネットワーク接続を用いて選択的に結合されてもよい。そのようなネットワーク接続により、上述した方法の工程を実行する過程で、CPU1102はネットワークから情報を受信したり、あるいはネットワークへ情報を送信するように意図されている。CPU1102を用いて実行される連続した命令としてしばしば表されるそのような情報は、例えば、搬送波に埋め込まれるコンピュータデータ信号の形態で、ネットワークから受信したり、ネットワークへ送信される。上述した装置および用具は、コンピュータハードウェアおよびソフトウェア分野の当業者にとって周知であろう。
【0046】
本発明のほんのわずかな実施の形態しか説明していないが、本発明の精神および範囲を逸脱することなく、本発明は他の多くの具体的な形態に実施され得ることを理解されたい。例として、オブジェクトのロックおよびアンロックに関する工程が再整理されてもよい。また、本発明の精神および範囲を逸脱することなく、工程が削除または追加されてもよい。
【0047】
本発明に従うライトウェイトモニタからヘビーウェイトモニタへ変換する方法は、Java(登録商標)をベースとする環境に関して実施することが特に好適であるが、本方法は、一般にオブジェクトをベースとする任意の環境に適用されてもよい。特に、本方法はプラットフォームに依存しないオブジェクトベースの環境において使用することが好適である。また、本方法は、なんらかの分散型オブジェクト指向システムにおいて実施されてもよいことを認識されたい。
【0048】
モニタは、オブジェクトがロック状態、非ロック状態、あるいは動作状態であるかを識別するビットとして説明された。一般に、モニタに関するビット数は広範に変更されることを留意されたい。加えて、オブジェクトの状態はモニタ以外の機構を用いて識別されてもよいことを認識されたい。例として、オブジェクトは、オブジェクトの状態を識別するリストへのポインターを含んでもよい。
【0049】
本発明は、仮想マシンに関連するコンピュータシステムで使用されるものとして説明されたが、一般に、本発明は任意の好適なオブジェクト指向コンピュータシステムに実施されてもよいことを認識されたい。具体的には、本発明に従うオブジェクトのロック、非ロックの方法は、一般に、本発明の精神および範囲を逸脱することなく、任意のマルチスレッドのオブジェクト指向システムに実施されてもよい。従って、これらの例は、限定的ではなく例示的なものとして考慮されるものであり、本発明はここで説明した詳細に限定されるものではなく、添付の請求の範囲の均等物の全範囲内において改変されてもよい。
【図面の簡単な説明】
【図1A】 ライトウェイトモニタからヘビーウェイトモニタへの従来の変換を示した図である。
【図1B】 競合ライトウェイトモニタを示した図である。
【図2】 本発明の実施の形態に従い、スレッドがオブジェクトの所有権を取得するプロセスを詳述したフローチャートである。
【図3A】 本発明の実施の形態に従い実施されたヘビーウェイトモニタを示した図である。
【図3B】 ライトウェイトモニタの変換により形成された図3Aに示すヘビーウェイトモニタを示した図である。
【図4】 図2のプロセスの一実施例について詳述したフローチャートである。
【図5】 本発明の実施の形態に従い、処理がエンタされたモニタを詳述したフローチャートである。
【図6】 本発明の実施の形態に従いファンクションにエンタされたモニタと他の様々なモニタ機能との関係を示した図である。
【図7】 本発明の実施の形態に従い、処理の所有者のチェックについて詳述したフローチャートである。
【図8】 本発明の実施の形態に従い、wait処理800のモニタについて詳述したフローチャートである。
【図9】 本発明の実施の形態に従い、exit機能について詳述したフローチャートである。
【図10】 本発明の実施の形態に従いnotifyまたはnotifyALL機能について詳述したフローチャートである。
【図11】 本発明を実施するのに適当な典型的で一般的な目的のコンピュータシステムを示した図である。
【符号の説明】
100…オブジェクトヘッダ
102…ライトウェイトモニタ
104…所有者フィールド
106…再帰カウンタ
108…ヘビーウェイトフラグ
110…スレッド
114…ヘビーウェイトモニタ
116…システムモニタ
118…再帰カウンタ
300…ヘビーウェイトモニタ
302…システムモニタ
304…システムモニタ所有者フィールド
306…所有者フィールド
308…再帰カウンタフィールド
310…リーエンフィルダフィールド
312…リーエンフィルダ再帰フィールド
1100…コンピュータシステム
1104,1106…主記憶装置
1108…補助記憶媒体
1110…入出力装置
Claims (16)
- マルチスレッドコンピュータにおいて、ライトウェイトモニタに関連付けられたヘビーウェイトモニタが生成されるときに、モニタ競合を解決するための方法であって、
第1のスレッドによってオブジェクトヘッダの内容を判定する工程と、
前記オブジェクトヘッダが、前記第1のスレッドとは異なる第2のスレッドによって現在所有されているライトウェイトモニタを含んでいると判定された場合には、関連付けられたヘビーウェイトモニタのポインタを有する前記第1のスレッドによってヘビーウェイトモニタを生成する工程と、
前記ライトウェイトモニタの現在の所有権者である前記第2のスレッドを先取得権者として特定する工程と、
先取得権者再帰カウンターにおける先取得権者再帰カウント数を現在の再帰カウント数に設定する工程と、
前記ヘビーウェイトモニタポインタを前記オブジェクトヘッダに挿入する工程と、
前記第1のスレッドによって、前記ヘビーウェイトモニタポインタに対応する前記ヘビーウェイトモニタに埋め込まれているシステムモニタにエンターする工程とを備える方法。 - 請求項1に記載の方法であって、前記挿入工程は、前記オブジェクトヘッダおよび前記ヘビーウェイトモニタポインタのアトミックなコンペアアンドスワップ処理を実行する工程を備える方法。
- 請求項2に記載の方法であって、前記アトミックなコンペアアンドスワップ処理が成功しなかったと判断されたとき、
前記ヘビーウェイトモニタを削除する工程と、
関連付けられたヘビーウェイトモニタポインタを有する前記第1のスレッドによって新たなヘビーウェイトモニタを生成する工程と、
先取得権者フィールドの設定にリターンする工程とを更に備える、方法。 - 請求項1に記載の方法であって、
前記オブジェクトヘッダが、前記第1のスレッドによって所有されているライトウェイトモニタを含んでいると決定された場合には、前記第1のスレッドが再エンタースレッドとして前記先取得権者再帰カウンターとは異なる再帰カウンタのオーバーフローを引き起こすか否かを決定する工程と、
前記再帰カウンタがオーバーフローしないときには前記再帰カウンタを増分させる工程と、
前記増分された再帰カウンタおよび前記オブジェクトヘッダのアトミックなコンペアアンドスワップ処理を実行する工程とを備える、方法。 - 請求項1に記載の方法であって、前記オブジェクトヘッダが、ヘビーウェイトモニタポインタを含んでいると決定された場合には、前記第1のスレッドによって、前記ヘビーウェイトモニタポインタに対応する前記ヘビーウェイトモニタに埋め込まれているシステムモニタにエンターする工程を更に備える、方法。
- 請求項1に記載の方法であって、前記システムモニタにエンターする工程は、
現在のスレッドが先取得権者であるか否かを判定する工程と、
現在の先取得権者フィールドに第1の値を設定する工程と、
所有権者フィールドに現在のスレッドIDを設定する工程と、
再帰フィールドに先取得権者の再帰値に第2の値を加えた値を設定する工程と、
先取得権者再帰フィールドに前記第1の値を再設定する工程とを備える、方法。 - 請求項1に記載の方法であって、さらに前記システムモニタによってnotifyALLコマンドを発行する工程を備える、方法。
- 請求項4に記載の方法であって、前記再帰カウンタの増分がオーバーフロー状態を招くと判断されるとき、前記ライトウェイトモニタを対応するヘビーウェイトモニタに変更する工程を備える、方法。
- 請求項6に記載の方法であって、前記第1の値は0であり、前記第2の値は1である、方法。
- 第1のスレッドがライトウェイトモニタを含むオブジェクトヘッダを有するオブジェクトに関する同期処理の実行を試みる際に、前記ライトウェイトモニタがヘビーウェイトモニタへ変更されるときに生じるモニタ競合を解決するためのコンピュータプログラムを格納するコンピュータ読み取り可能媒体であって、
前記コンピュータプログラムは、
前記第1のスレッドによって、前記オブジェクトヘッダの内容を判定するための機能と、
前記オブジェクトヘッダが、前記第1のスレッドとは異なる第2のスレッドによって現在所有されるライトウェイトモニタを含んでいると判定された場合に、関連付けられたヘビーウェイトモニタのポインタを有する前記第1のスレッドによってヘビーウェイトモニタを生成するための機能と、
前記ライトウェイトモニタの現在の所有権者である前記第2のスレッドを先取得権者として特定するための機能と、
先取得権者再帰カウンターにおける先取得権者再帰カウント数を現在の再帰カウント数に設定するための機能と、
前記ヘビーウェイトモニタポインタを前記オブジェクトヘッダに挿入するための機能と、
前記第1のスレッドによって、前記ヘビーウェイトモニタポインタに対応する前記ヘビーウェイトモニタに埋め込まれているシステムモニタにエンターするための機能とを、
コンピュータによって実現させる、コンピュータ読み取り可能媒体。 - 請求項10に記載のコンピュータ読み取り可能媒体において、前記コンピュータプログラムは、前記オブジェクトヘッダおよび前記ヘビーウェイトモニタポインタのアトミックなコンペアアンドスワップ処理を実行するための機能を更にコンピュータによって実現させる、コンピュータ読み取り可能媒体。
- 請求項11に記載のコンピュータ読み取り可能媒体において、前記コンピュータプログラムは、前記アトミックなコンペアアンドスワップ処理が成功しない場合、
前記ヘビーウェイトモニタを削除するための機能と、
関連付けられたヘビーウェイトモニタポインタを有する前記第1のスレッドによって新たなヘビーウェイトモニタを生成するための機能と、
先取得権者フィールドの設定にリターンするための機能とを更にコンピュータによって実現させる、コンピュータ読み取り可能媒体。 - 請求項10に記載のコンピュータ読み取り可能媒体において、前記コンピュータプログラムは、前記オブジェクトヘッダが、前記第1のスレッドによって所有されているライトウェイトモニタを含むと判定されたときに、
再エンタースレッドとしての前記第1のスレッドが前記先取得権者再帰カウンターとは異なる再帰カウンタのオーバフローを引き起こすか否かを判定するための機能と、
前記再帰カウンタがオーバフローしないと判定されたときに前記再帰カウンタを増分するための機能と、
前記増分された再帰カウンタおよびオブジェクトヘッダのアトミックなコンペアアンドスワップ処理を実行するための機能とを更にコンピュータによって実現させる、コンピュータ読み取り可能媒体。 - 複数のスレッドを含むメモリを有するコンピュータシステムであって、前記コンピュータシステムは、
前記メモリに接続されたプロセッサと、
オブジェクトの所有権に関する情報を含むライトウェイトモニタを含むオブジェクトヘッダを含むオブジェクトと、
複数のスレッドから選択された第1のスレッドであって、前記オブジェクトが前記第1のスレッドにとって利用不能なとき、前記ライトウェイトモニタを、第2のスレッドによって所有されている対応するヘビーウェイトモニタに変更する第1のスレッドと、
関連付けられたヘビーウェイトモニタポインタを有する第1のスレッドによってヘビーウェイトモニタを生成する前記ライトウェイトモニタに含まれている第2のスレッドIDによって示された前記オブジェクトをロックした複数のスレッドから選択された第2のスレッドと、
前記ライトウェイトモニタの現在の所有権者である前記第2のスレッドを先取得権者として特定するための先取得権者特定部と、
先取得権者再帰カウンター内の先取得権者再帰カウント数に現在の再帰カウント数を格納するための先取得権者再帰カウンターと、
前記ヘビーウェイトモニタポインタに対応する前記ヘビーウェイトモニタに埋め込まれており、前記第1のスレッドがエンターすることによって前記モニタに関する競合を解決する、システムモニタと、
を備える、コンピュータシステム。 - 請求項14に記載のコンピュータシステムであって、前記現在の再帰カウント数は、前記オブジェクトが再エンターした回数を表す、コンピュータシステム。
- 請求項15に記載のコンピュータシステムであって、前記ヘビーウェイトモニタポインタは、前記オブジェクトに関連付けられたヘビーウェイトモニタを示す、コンピュータシステム。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12195799P | 1999-02-25 | 1999-02-25 | |
US60/121,957 | 1999-02-25 | ||
US09/511,644 US6691304B1 (en) | 1999-02-25 | 2000-02-22 | Monitor conversion in a multi-threaded computer system |
US09/511,644 | 2000-02-22 | ||
PCT/US2000/004882 WO2000050993A2 (en) | 1999-02-25 | 2000-02-24 | Monitor conversion in a multi-threaded computer system |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003536118A JP2003536118A (ja) | 2003-12-02 |
JP4620871B2 true JP4620871B2 (ja) | 2011-01-26 |
Family
ID=26820007
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000601526A Expired - Lifetime JP4620871B2 (ja) | 1999-02-25 | 2000-02-24 | マルチスレッドコンピュータシステムにおけるモニタ変換 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6691304B1 (ja) |
EP (1) | EP1163581B1 (ja) |
JP (1) | JP4620871B2 (ja) |
AU (1) | AU3606900A (ja) |
DE (1) | DE60000925T2 (ja) |
WO (1) | WO2000050993A2 (ja) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7159220B2 (en) * | 2001-09-28 | 2007-01-02 | Intel Corporation | Flexible acceleration of java thread synchronization on multiprocessor computers |
US6892200B2 (en) * | 2001-11-13 | 2005-05-10 | America Online, Incorporated | Javascript engine |
US20030145035A1 (en) * | 2002-01-15 | 2003-07-31 | De Bonet Jeremy S. | Method and system of protecting shared resources across multiple threads |
US20040006583A1 (en) * | 2002-06-26 | 2004-01-08 | Nicholas Shaylor | Method and apparatus for converting a synchronized method into a non-synchronized method |
US6988099B2 (en) * | 2002-06-27 | 2006-01-17 | Bea Systems, Inc. | Systems and methods for maintaining transactional persistence |
US7051026B2 (en) * | 2002-07-31 | 2006-05-23 | International Business Machines Corporation | System and method for monitoring software locks |
JP3864250B2 (ja) | 2002-10-31 | 2006-12-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 排他制御装置、排他制御方法、プログラム、及び記録媒体 |
US7509429B2 (en) * | 2004-05-28 | 2009-03-24 | Sap Ag | Message endpoint activation |
US7594237B2 (en) * | 2004-06-01 | 2009-09-22 | Sap Ag | Program object to support connection generation |
US20050289212A1 (en) * | 2004-06-01 | 2005-12-29 | Tankov Nikolal D | Non-transactional resource reference |
US9582313B2 (en) * | 2004-06-03 | 2017-02-28 | Sap Se | Connection resource system |
US7676810B2 (en) * | 2004-06-03 | 2010-03-09 | Sap Ag | Identification of execution context |
US7657658B2 (en) * | 2004-06-07 | 2010-02-02 | Sap Ag | Resource adapter deployment |
US7617497B1 (en) * | 2004-08-30 | 2009-11-10 | Sun Microsystems, Inc. | Method and system for creating and using storage threads |
US8095921B2 (en) * | 2005-10-12 | 2012-01-10 | International Business Machines Corporation | Identifying code that wastes time switching tasks |
US7886300B1 (en) | 2006-09-26 | 2011-02-08 | Oracle America, Inc. Formerly Known As Sun Microsystems, Inc. | Mechanism for implementing thread synchronization in a priority-correct, low-memory safe manner |
US8627292B2 (en) * | 2009-02-13 | 2014-01-07 | Microsoft Corporation | STM with global version overflow handling |
US9141439B2 (en) * | 2010-10-11 | 2015-09-22 | Sap Se | System and method for reporting a synchronization event in a runtime system of a computer system |
US9280444B2 (en) | 2010-10-11 | 2016-03-08 | Sap Se | System and method for identifying contention of shared resources in a runtime system |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04343143A (ja) * | 1991-05-20 | 1992-11-30 | Nippon Telegr & Teleph Corp <Ntt> | マルチプロセッサシステムにおける共有資源相互排除方式 |
JPH05225149A (ja) * | 1992-02-13 | 1993-09-03 | Toshiba Corp | ロック方式 |
US5761670A (en) * | 1995-12-08 | 1998-06-02 | Sun Microsystems, Inc. | System and method for space efficient object locking using global and local locks |
JP3746826B2 (ja) * | 1996-02-19 | 2006-02-15 | 富士通株式会社 | 資源ロック制御機構 |
DE69841526D1 (de) * | 1997-03-04 | 2010-04-15 | Panasonic Corp | Zur effizienten Ausführung vieler asynchronen Ereignisaufgaben geeigneter Prozessor |
US6247025B1 (en) * | 1997-07-17 | 2001-06-12 | International Business Machines Corporation | Locking and unlocking mechanism for controlling concurrent access to objects |
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 |
US6173442B1 (en) * | 1999-02-05 | 2001-01-09 | Sun Microsystems, Inc. | Busy-wait-free synchronization |
-
2000
- 2000-02-22 US US09/511,644 patent/US6691304B1/en not_active Expired - Lifetime
- 2000-02-24 WO PCT/US2000/004882 patent/WO2000050993A2/en active IP Right Grant
- 2000-02-24 JP JP2000601526A patent/JP4620871B2/ja not_active Expired - Lifetime
- 2000-02-24 AU AU36069/00A patent/AU3606900A/en not_active Abandoned
- 2000-02-24 DE DE60000925T patent/DE60000925T2/de not_active Expired - Lifetime
- 2000-02-24 EP EP00914715A patent/EP1163581B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
DE60000925T2 (de) | 2003-05-28 |
EP1163581B1 (en) | 2002-12-04 |
DE60000925D1 (de) | 2003-01-16 |
EP1163581A2 (en) | 2001-12-19 |
US6691304B1 (en) | 2004-02-10 |
JP2003536118A (ja) | 2003-12-02 |
WO2000050993A3 (en) | 2000-12-21 |
WO2000050993A2 (en) | 2000-08-31 |
AU3606900A (en) | 2000-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4620871B2 (ja) | マルチスレッドコンピュータシステムにおけるモニタ変換 | |
US9323586B2 (en) | Obstruction-free data structures and mechanisms with separable and/or substitutable contention management mechanisms | |
US10353749B2 (en) | Lock-free dual queue with condition synchronization and time-outs | |
US5761659A (en) | Method, product, and structure for flexible range locking of read and write requests using shared and exclusive locks, flags, sub-locks, and counters | |
JP3953130B2 (ja) | スペース効率の良いオブジェクト・ロッキング・システム及び方法 | |
US5862376A (en) | System and method for space and time efficient object locking | |
US6247025B1 (en) | Locking and unlocking mechanism for controlling concurrent access to objects | |
US7194495B2 (en) | Non-blocking memory management mechanism for supporting dynamic-sized data structures | |
US6546443B1 (en) | Concurrency-safe reader-writer lock with time out support | |
US6622155B1 (en) | Distributed monitor concurrency control | |
JP4042945B2 (ja) | 共用資源を非同期的に更新するためのインターフェース・システムおよび方法 | |
US7685583B2 (en) | Obstruction-free mechanism for atomic update of multiple non-contiguous locations in shared memory | |
JP3575593B2 (ja) | オブジェクトのロック管理方法及び装置 | |
EP1316013B1 (en) | Method and apparatus for locking objects using shared locks | |
EP0532333A2 (en) | A system and method for preventing deadlock in a multiprocessor environment | |
US7100161B2 (en) | Method and apparatus for resource access synchronization | |
US6587955B1 (en) | Real time synchronization in multi-threaded computer systems | |
US6487652B1 (en) | Method and apparatus for speculatively locking objects in an object-based system | |
US6473820B1 (en) | Method and apparatus for user level monitor implementation | |
US6687904B1 (en) | Method and apparatus for selecting a locking policy based on a per-object locking history | |
EP1435572A2 (en) | Method and apparatus for providing dynamic locks for resources | |
US6883026B1 (en) | Method and apparatus for managing locks of objects and method and apparatus for unlocking objects | |
US20020124083A1 (en) | Method and apparatus for increasing the efficiency of transactions and connection sharing in an enterprise environment | |
EP0955584A2 (en) | Fast synchronization for programs written in the java programming language | |
US6094663A (en) | Method and apparatus for implementing atomic queues |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061221 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20090806 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090818 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20091117 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20091125 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100216 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100316 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100614 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100621 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100909 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20101005 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20101029 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131105 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4620871 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100216 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131105 Year of fee payment: 3 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131105 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |