JP3756352B2 - コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体 - Google Patents
コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体 Download PDFInfo
- Publication number
- JP3756352B2 JP3756352B2 JP18388099A JP18388099A JP3756352B2 JP 3756352 B2 JP3756352 B2 JP 3756352B2 JP 18388099 A JP18388099 A JP 18388099A JP 18388099 A JP18388099 A JP 18388099A JP 3756352 B2 JP3756352 B2 JP 3756352B2
- Authority
- JP
- Japan
- Prior art keywords
- class
- program
- object data
- executed
- source program
- 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 - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Description
【発明の属する技術分野】
本発明は、オブジェクトデータが複数のスレッドからアクセスされる場合に、アクセスを自動的にシリアライズすることで、アクセス競合を容易に回避することができるコンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体に関するものである。
【0002】
従来より、複数のクライアントがサーバ上のアプリケーションプログラムを共用することで、リソースの有効活用を図ることが可能なクライアント−サーバシステムが用いられている。このようなクライアント−サーバシステムにおいては、当該クライアントからの起動により、アプリケーションプログラムを起動させるためのスレッドが生成される。ここで、複数のクライアントからの起動により、同一のオブジェクトデータに関して、複数のスレッドが生成された場合には、スレッド間で競合が生じるため、このようなアクセス競合を効果的に回避する手段、手法が要請されている。
【0003】
【従来の技術】
図23は、上述した従来のクライアント−サーバシステムの構成を示すブロック図である。この図に示したクライアント−サーバシステムは、サーバ1と、サーバ1にネットワーク3を介してそれぞれ接続されたクライアント41 およびクライアント42 から構成されている。サーバ1において、アプリケーションプログラムAP1 およびアプリケーションプログラムAP2 は、オブジェクト指向プログラミングによるソースプログラムがコンパイルされた実行形式のプログラムであり、クライアント41 およびクライアント42 から起動される。
【0004】
上記アプリケーションプログラムAP1 は、オブジェクト指向プログラミングにおける親クラスC1 に対応している。一方、アプリケーションプログラムAP2 は、上記親クラスC1 を継承する子クラスC2 に対応している。このような継承関係より、アプリケーションプログラムAP1 およびアプリケーションプログラムAP2 の起動時には、親クラスC1 の共通領域CO (オブジェクトデータ)がアクセスされることになる。スレッド生成部2は、アプリケーションプログラムAP1 およびアプリケーションプログラムAP2 を実行するためのスレッドS1 およびスレッドS2 を生成する。
【0005】
上記構成において、クライアント41 およびクライアント42 によりサーバ1のアプリケーションプログラムAP1 およびアプリケーションプログラムAP2 が起動されると、スレッド生成部2は、スレッドS1 およびスレッドS2 をそれぞれ生成する。ここで、アプリケーションプログラムAP1 およびアプリケーションプログラムAP2 の実行に際しては、共通領域C0 (オブジェクトデータ)がスレッドS1 およびスレッドS2 に同時にアクセスされる、というアクセス競合が発生する。このような場合、スレッドS1 、スレッドS2 が共通領域C0 (オブジェクトデータ)に同時にアクセスしないように、スレッドS1 およびスレッドS2 をシリアライズするために排他制御を行う必要がある。この排他制御とは、スレッドS1 (またはスレッドS2 )に共通領域C0 へのアクセス権を付与しておき、アクセスが終了した時点でスレッドS2 (またはスレッドS1 )にアクセス権を付与することで、アクセス競合を回避するための制御をいう。
【0006】
従来においては、排他制御の例として、アプリケーションプログラムの利用者が、当該アプリケーションプログラムを実行する前に、コマンド入力等により手動で当該アプリケーションプログラムを実行するためのロックをスレッドに獲得させるといった手法(以下、第1の手法という)が採られている。これにより、当該アプリケーションプログラムは、ロックを獲得したスレッドによってのみ実行され、他のスレッドは、当該アプリケーションプログラムを実行することができない。そして、アプリケーションプログラムの実行が終了すると、利用者により、ロックが解除される。これにより、他のスレッドは、当該アプリケーションプログラムの実行を行い得る。また、従来においては、別の排他制御の例として、親クラスC1 および子クラスC2 の作成時に、プログラマが、メソッド定義の中で上述した排他制御を行うための命令を記述するという手法(以下、第2の手法という)も採られている。
【0007】
【発明が解決しようとする課題】
ところで、前述したように、従来においては、共通領域C0 (オブジェクトデータ)に複数のスレッドが同時にアクセスされるというアクセス競合を回避すべく、第1の手法または第2の手法により排他制御を行っている旨を述べた。
【0008】
しかしながら、第1の手法においては、利用者により手動でロックの獲得/解除を行っているため、利用者のミスによりロックの解除のし忘れ等が発生することで、他のスレッド(利用者)が当該アプリケーションプログラムを長時間に亘って利用できない状態になるというトラブルが予想される。したがって、第1の手法は、アプリケーションプログラムの利用効率が低下する恐れがあることから、得策であるとは言えない。また、第1の手法においては、アプリケーションプログラムのデータ構造、特に、オブジェクトデータが存在するクラスを利用者が意識して排他制御を行うことが困難である。したがって、苦肉の策として、第1の手法においては、オブジェクトデータの存在の有無にかかわらず、アプリケーションプログラム単位で排他制御を行っていることから、本来、排他制御を行う必要がないアプリケーションに対して排他制御を行ってしまう場合があり、アプリケーションプログラムの利用効率が低下する。
【0009】
さらに、第2の手法においては、プログラマにより、メソッド定義の中で上述した排他制御を行うための命令を記述するという手法が採られているが、ヒューマンエラーにより、誤った排他制御の命令を記述する可能性がある。このような場合には、排他制御が正常に実行されないというトラブルが発生するため、この第2の手法も得策であるとは言えない。このように、上述した第1および第2の手法は、利用者(プログラマも含む)に作業負担を強いる割には、効果的にアクセス競合を回避することができないのである。
【0010】
本発明は、上記に鑑みてなされたもので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合を容易に回避することができるコンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とする。
【0011】
【課題を解決するための手段】
上記目的を達成するために、請求項1にかかる発明は、オブジェクト指向プログラミングによるソースプログラムをコンパイルすることで、スレッドの生成により実行されるオブジェクトプログラムを生成するコンパイラ装置において、前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出する検出手段(後述する実施の形態1のオブジェクトデータ検出部71に相当)と、前記検出手段の検出結果をオブジェクトデータ保持情報として前記オブジェクトプログラムに組み込む第1の組込手段(後述する実施の形態1のオブジェクトコード生成部70に相当)と、前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが当該メソッドを実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込む第2の組込手段(後述する実施の形態1のオブジェクトコード生成部70に相当)とを備えることを特徴とする。
【0012】
この請求項1にかかる発明によれば、ソースプログラムがコンパイルされる際、検出手段により、ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かが検出された後、第1の組込手段により、検出結果がオブジェクトデータ保持情報としてオブジェクトプログラムに組み込まれる。さらに、第2の組込手段により、排他制御命令がオブジェクトプログラムに組み込まれる。そして、オブジェクトプログラムが実行されると、排他制御により、複数のスレッドのうち一つのスレッドが、オブジェクトデータに対応する当該メソッドを実行する。
【0013】
このように、請求項1にかかる発明によれば、コンパイル時に、オブジェクトデータ保持情報および排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避される。
【0014】
また、請求項2にかかる発明は、請求項1に記載のコンパイラ装置において、前記ソースプログラムにおけるクラス定義に基づいて、クラスの継承関係をチェックする継承関係チェック手段(後述する実施の形態1の継承関係チェック部72に相当)を備え、前記検出手段は、前記継承関係チェック手段のチェック結果に基づいて、当該クラスに対して継承関係にあるクラスについてもクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出し、前記第2の組込手段は、前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが、継承関係にあるクラスのメソッドも含めて実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込むことを特徴とする。
【0015】
この請求項2にかかる発明によれば、ソースプログラムがコンパイルされる際、継承関係チェック手段により、ソースプログラムにおけるクラスの継承関係がチェックされ、検出手段により、当該クラスに対して継承関係にあるクラスについてもクラス定義に基づいて、オブジェクトデータが定義されているか否かが検出される。さらに、第1の組込手段により、検出結果がオブジェクトデータ保持情報としてオブジェクトプログラムに組み込まれた後、第2の組込手段により、排他制御命令がオブジェクトプログラムに組み込まれる。そして、オブジェクトプログラムが実行されると、排他制御により、複数のスレッドのうち一つのスレッドのみが継承関係にあるクラスのメソッドも含めて実行される。
【0016】
このように、請求項2にかかる発明によれば、コンパイル時に、クラスの継承関係をチェックし、このチェック結果に基づくオブジェクトデータ保持情報および排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、従来困難とされていた、クラスの継承関係も考慮した状態で、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避される。
【0017】
また、請求項3にかかる発明は、オブジェクト指向プログラミングによるソースプログラムをコンパイルすることで、スレッドの生成により実行されるオブジェクトプログラムを生成するコンパイラ装置において、前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出する検出手段(後述する実施の形態2のオブジェクトデータ検出部71に相当)と、前記オブジェクトプログラムの実行時に、複数のスレッドのうち一つのスレッドのみが、前記検出手段により検出されたオブジェクトデータをアクセスするように制御する排他制御命令を前記オブジェクトプログラムに組み込む組込手段(後述する実施の形態2のオブジェクトコード生成部70に相当)とを備えることを特徴とする。
【0018】
この請求項3にかかる発明によれば、ソースプログラムがコンパイルされる際、検出手段により、ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かが検出された後、組込手段により、排他制御命令がオブジェクトプログラムに組み込まれる。そして、オブジェクトプログラムが実行されると、排他制御により、複数のスレッドのうち一つのスレッドのみが、検出されたオブジェクトデータをアクセスするように制御する。また、オブジェクトデータが検出されなかったメソッドに関しては、排他制御が行われることなく、複数のスレッド間では、同一の上記メソッドが実行される。
【0019】
このように、請求項3にかかる発明によれば、コンパイル時に、排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避される。
【0020】
また、請求項4にかかる発明は、オブジェクト指向プログラミングによるソースプログラムをコンパイルさせることで、スレッドの生成により実行されるオブジェクトプログラムを生成させるコンパイラを記録したコンピュータ読み取り可能な記録媒体であって、前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出させる検出工程(後述する実施の形態1のステップSB2およびステップSB4に相当)と、前記検出工程の検出結果をオブジェクトデータ保持情報として前記オブジェクトプログラムに組み込ませる第1の組込工程(後述する実施の形態1のステップSB7〜ステップSB10に相当)と、前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが当該メソッドを実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込ませる第2の組込工程(後述する実施の形態1のステップSA5に相当)とをコンピュータに実行させるためのコンパイラを記録したコンピュータ読み取り可能な記録媒体である。
【0021】
この請求項4にかかる発明によれば、ソースプログラムがコンパイルされる際、検出工程において、ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かが検出された後、第1の組込工程において、検出結果がオブジェクトデータ保持情報としてオブジェクトプログラムに組み込まれる。さらに、第2の組込工程において、排他制御命令がオブジェクトプログラムに組み込まれる。そして、オブジェクトプログラムが実行されると、排他制御により、複数のスレッドのうち一つのスレッドが、オブジェクトデータに対応する当該メソッドを実行する。
【0022】
このように、請求項4にかかる発明によれば、コンパイル時に、オブジェクトデータ保持情報および排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避される。
【0023】
また、請求項5にかかる発明は、請求項4に記載のコンパイラを記録したコンピュータ読み取り可能な記録媒体において、前記ソースプログラムにおけるクラス定義に基づいて、クラスの継承関係をチェックさせる継承関係チェック工程(後述する実施の形態1のステップSB1に相当)を含み、前記検出工程においては、前記継承関係チェック工程のチェック結果に基づいて、当該クラスに対して継承関係にあるクラスについてもクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出させ、前記第2の組込工程においては、前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが、継承関係にあるクラスのメソッドも含めて実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込ませることを特徴とする。
【0024】
この請求項5にかかる発明によれば、ソースプログラムがコンパイルされる際、継承関係チェック工程において、ソースプログラムにおけるクラスの継承関係がチェックされ、検出工程において、当該クラスに対して継承関係にあるクラスについてもクラス定義に基づいて、オブジェクトデータが定義されているか否かが検出される。さらに、第1の組込工程において、検出結果がオブジェクトデータ保持情報としてオブジェクトプログラムに組み込まれた後、第2の組込工程において、排他制御命令がオブジェクトプログラムに組み込まれる。そして、オブジェクトプログラムが実行されると、排他制御により、複数のスレッドのうち一つのスレッドのみが継承関係にあるクラスのメソッドも含めて実行される。
【0025】
このように、請求項5にかかる発明によれば、コンパイル時に、クラスの継承関係をチェックし、このチェック結果に基づくオブジェクトデータ保持情報および排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、従来困難とされていた、クラスの継承関係も考慮した状態で、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避される。
【0026】
また、請求項6にかかる発明は、オブジェクト指向プログラミングによるソースプログラムをコンパイルさせることで、スレッドの生成により実行されるオブジェクトプログラムを生成させるコンパイラを記録したコンピュータ読み取り可能な記録媒体であって、前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出させる検出工程(後述する実施の形態2のステップSG4に相当)と、前記オブジェクトプログラムの実行時に、複数のスレッドのうち一つのスレッドのみが、前記検出手段により検出されたオブジェクトデータをアクセスするように制御する排他制御命令を前記オブジェクトプログラムに組み込ませる組込工程(後述する実施の形態1のステップSG5に相当)とをコンピュータに実行させるためのコンパイラを記録したコンピュータ読み取り可能な記録媒体である。
【0027】
この請求項6にかかる発明によれば、ソースプログラムがコンパイルされる際、検出工程において、ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かが検出された後、組込工程において、排他制御命令がオブジェクトプログラムに組み込まれる。そして、オブジェクトプログラムが実行されると、排他制御により、複数のスレッドのうち一つのスレッドのみが、検出されたオブジェクトデータをアクセスするように制御する。また、オブジェクトデータが検出されなかったメソッドに関しては、排他制御が行われることなく、複数のスレッド間では、同一の上記メソッドが実行される。
【0028】
このように、請求項6にかかる発明によれば、コンパイル時に、排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避される。
【0029】
【発明の実施の形態】
以下、図面を参照して本発明にかかるコンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体の実施の形態1および2について詳細に説明する。
【0030】
(実施の形態1)
図1は、本発明にかかる実施の形態1の構成を示すブロック図である。この図に示した情報処理装置10において、CPU(Central Processing Unit)20は、装置各部を制御するものである。ROM(Read Only Memory)30は、CPU20において実行される各種プログラムや、変数、初期値等を記憶する。RAM(Random Access Memory)40は、CPU20において生成される各種演算データ等を一時的に記憶する。コンパイラ部50は、高水準言語で記述されたソースプログラムSPを機械語からなるオブジェクトプログラムOPに翻訳するものであり、プログラム解析部60およびオブジェクトコード生成部70を有している。このソースプログラムSPは、オブジェクト指向プログラミングにより作成されたプログラムである。
【0031】
ここで、上記ソースプログラムSPの一例を図2(a)〜(c)を参照して説明する。図2(a)〜(c)には、ソースプログラムSPとして、ソースプログラム200FJ、ソースプログラム200A およびソースプログラム200B がそれぞれ図示されている。ソースプログラム200FJは、FJBASEクラスのソースプログラムであり、ソースプログラム200A は、上記FJBASEクラスを継承しているAクラスのソースプログラムである。さらに、ソースプログラム200B は、Aクラスを継承しているBクラスのソースプログラムである。すなわち、FJBASEクラス、AクラスおよびBクラスは、AクラスがFJBASEクラスを継承しており、BクラスがAクラスを継承しているという継承関係を有している。
【0032】
図3は、図2(a)に示したソースプログラム200FJにおいてFJBASEクラスを定義したクラス定義(FJBASE)を示す図である。この図において、クラス定義は、高水準言語の一例としてCOBOL言語で記述されている。IDENTIFICATION DIVISION(見出し部)には、CLASS-ID(クラス名)として「FJBASE」が記述されている。また、クラス定義においては、FJBASEクラスに関するファクトリ定義とオブジェクト定義とがそれぞれ記述されている。上記ファクトリ定義には、FJBASEクラスのオブジェクトインスタンスを生成するためのファクトリオブジェクトが定義されている。このファクトリ定義において、IDENTIFICATION DIVISION(見出し部)には、「FACTORY」が記述されており、PROCEDURE DIVISION(手続き部)には、上記ファクトリオブジェクトに関する「メソッドNEW」が定義されている。
【0033】
一方、オブジェクト定義には、FJBASEクラスのオブジェクトが定義されており、IDENTIFICATION DIVISION(見出し部)として「OBJECT」、PROCEDURE DIVISION(手続き部)として「メソッドM1」および「メソッドM2」がそれぞれ定義されている。上記メソッドNEW、M1およびM2の定義の一例としては、図7(c)に示すようにIDENTIFICATION DIVISION(見出し部)、PROCEDURE DIVISION(手続き部)等により記述されている。
【0034】
図4は、図2(b)に示したソースプログラム200A においてAクラスを定義したクラス定義(A)を示す図である。この図において、IDENTIFICATION DIVISION(見出し部)には、CLASS-ID(クラス名)として「A」が記述されているとともに、継承関係を示すINHERITSには、「FJBASE」が記述されている。このINHERITS(「FJBASE」)により、AクラスがFJBASEクラスを継承していることがわかる。また、クラス定義においては、Aクラスに関するファクトリ定義とオブジェクト定義とがそれぞれ記述されている。また、ファクトリ定義には、Aクラスのオブジェクトインスタンスを生成するためのファクトリオブジェクトが定義されている。このファクトリ定義において、IDENTIFICATION DIVISION(見出し部)には、「FACTORY」が記述されており、PROCEDURE DIVISION(手続き部)には、上記ファクトリオブジェクトに関する「メソッドM3」および「メソッドM4」が定義されている。
【0035】
一方、オブジェクト定義には、Aクラスのオブジェクトが定義されており、IDENTIFICATION DIVISION(見出し部)として「OBJECT」が記述されている。また、Aクラスのオブジェクト定義には、ENVIRONMENT DIVISION(環境部)、DATA DIVISION(データ部)およびPROCEDURE DIVISION(手続き部)がそれぞれ記述されている。上記DATA DIVISION(データ部)には、前述したオブジェクトデータが定義されており、PROCEDURE DIVISION(手続き部)には、「メソッドM5」および「メソッドM6」がそれぞれ定義されている。
【0036】
図5は、図2(c)に示したソースプログラム200B においてBクラスを定義したクラス定義(B)を示す図である。この図において、IDENTIFICATION DIVISION(見出し部)には、CLASS-ID(クラス名)として「B」が記述されているとともに、継承関係を示すINHERITSには、「A」が記述されている。このINHERITS(「A」)により、BクラスがAクラスを継承していることがわかる。また、クラス定義においては、Bクラスに関するファクトリ定義とオブジェクト定義とがそれぞれ記述されている。上記ファクトリ定義には、Bクラスのオブジェクトインスタンスを生成するためのファクトリオブジェクトが定義されている。このファクトリ定義において、IDENTIFICATION DIVISION(見出し部)には、「FACTORY」が記述されている。また、ファクトリ定義においては、ENVIRONMENT DIVISION(環境部)およびPROCEDURE DIVISION(手続き部)がそれぞれ定義されており、上記PROCEDURE DIVISION(手続き部)には、ファクトリオブジェクトに関する「メソッドM7」および「メソッドM8」がそれぞれ定義されている。
【0037】
一方、オブジェクト定義には、Bクラスのオブジェクトが定義されており、IDENTIFICATION DIVISION(見出し部)として「OBJECT」が記述されている。また、Bクラスのオブジェクト定義には、ENVIRONMENT DIVISION(環境部)、DATA DIVISION(データ部)およびPROCEDURE DIVISION(手続き部)がそれぞれ記述されている。上記DATA DIVISION(データ部)には、前述したオブジェクトデータが定義されており、PROCEDURE DIVISION(手続き部)には、「メソッドM9」および「メソッドM10」がそれぞれ定義されている。
【0038】
プログラム解析部60は、ソースプログラムSPを解析するものであり、ソースプログラムSPの字句を解析する字句解析部61、構文を解析する構文解析部62および意味を解析する意味解析部63から構成されている。オブジェクトコード生成部70は、プログラム解析部60の解析結果に基づいて、ソースプログラムSPからオブジェクトコードを生成し、これをオブジェクトプログラムOPとして出力する。
【0039】
このオブジェクトコード生成部70において、オブジェクトデータ検出部71は、ソースプログラムSPにおけるオブジェクトデータを検出するものである。具体的には、オブジェクトデータ検出部71は、ソースプログラムSP(たとえば、ソースプログラム200FJ、ソースプログラム200A およびソースプログラム200B )において、オブジェクトデータ(DATA DIVISION(データ部))を検出する。継承関係チェック部72は、ソースプログラムSP(たとえば、ソースプログラム200FJ、ソースプログラム200A およびソースプログラム200B )におけるクラスの継承関係のチェックを行う。具体的には、継承関係チェック部72は、図5および図6に示したINHERITS(図5および図6参照)を確認することで、クラスの継承関係をチェックする。
【0040】
入力装置80は、キーボード、マウス等であり、各種データ入力、コマンド入力に用いられる。出力装置90は、CRT(Cathode-Ray Tube)、LCD(Liquid Crystal Display)、プリンタ等であり、データの表示、印刷等を行う。記憶装置100は、たとえば、ハードディスク装置等の外部記憶装置である。読取装置110は、たとえば、CD−ROM(Compact Disk - Read Only Memory)等の記録媒体120に記録されたデータ、プログラム等を読み取る装置である。
【0041】
つぎに、上述した実施の形態1の動作について、図6に示したフローチャートを参照しつつ説明する。以下においては、図1に示したソースプログラムSPとして、ソースプログラム200FJ、ソースプログラム200A およびソースプログラム200B (図2(a)〜(c)参照)をコンパイルする動作について説明する。図6に示したステップSA1では、まず、ソースプログラム200FJがプログラム解析部60に読み込まれる。これにより、ステップSA2では、字句解析部61、構文解析部62および意味解析部63により、ソースプログラム200FJの字句、構文および意味についての解析が行われた後、解析結果がオブジェクトコード生成部70に渡される。
【0042】
ステップSA3では、オブジェクトコード生成部70の継承関係チェック部72は、ソースプログラム200FJに関する継承関係チェック処理を行う。すなわち、継承関係チェック処理において、図8に示したステップSB1では、継承関係チェック部72は、ソースプログラム200FJに関する図3に示したクラス定義(FJBASE)において、前述したINHERITSを確認することで、FJBASEクラスが継承しているクラスがあるか否かを判断する。この場合、図3に示したクラス定義(FJBASE)にINHERITSが定義されていないため、継承関係チェック部72は、判断結果を「No」とする。
【0043】
ステップSB2では、オブジェクトデータ検出部71は、自クラス(この場合、FJBASEクラス)において、オブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを判断する。この場合、図3に示したクラス定義(FJBASE)にオブジェクトデータ(DATA DIVISION(データ部))が定義されていないため、オブジェクトデータ検出部71は、判断結果を「No」とする。ステップSB6では、オブジェクトデータ検出部71は、上記オブジェクトデータ(DATA DIVISION(データ部))が定義されていないものが、ファクトリ定義であるか否かを判断する。この場合、図3に示したファクトリ定義にオブジェクトデータが定義されていないため、オブジェクトデータ検出部71は、判断結果を「Yes」とする。
【0044】
ステップSB9では、継承関係チェック部72は、図2(a)に示したクラス情報ファイル400FJおよびロードモジュール300FJにおけるオブジェクトデータ保持情報AおよびCにそれぞれ「0」を設定した後、図6に示したメインルーチンに戻る。ここで、ロードモジュール300FJおよびクラス情報ファイル400FJは、ソースプログラム200FJがコンパイルされることにより、生成されるものである。ロードモジュール300FJは、実行形式のプログラムであり、クラス情報ファイル400FJは、自クラス(この場合、FJBASEクラス)または継承している親クラスにおいて、ファクトリ定義およびオブジェクト定義(図3参照)で、オブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを表す情報であり、オブジェクトデータ保持情報AおよびBからなる。
【0045】
上記オブジェクトデータ保持情報Aは、ファクトリ定義にオブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを表す情報である。具体的には、オブジェクトデータ保持情報Aには、ファクトリ定義にオブジェクトデータ(DATA DIVISION(データ部))が定義されている場合、「1」が設定され、定義されていない場合、「0」が設定される。また、オブジェクトデータ保持情報Bは、オブジェクト定義にオブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを表す情報である。具体的には、オブジェクトデータ保持情報Bには、オブジェクト定義にオブジェクトデータ(DATA DIVISION(データ部))が定義されている場合、「1」が設定され、定義されていない場合、「0」が設定される。なお、図2(b)および(c)に示したクラス情報ファイル400A および400B は、上述したクラス情報ファイル400FJと同様のファイルである。
【0046】
また、ロードモジュール300FJにおけるオブジェクトデータ保持情報Cは、オブジェクトデータ保持情報Aと同一の情報である。すなわち、オブジェクトデータ保持情報Cには、ファクトリ定義にオブジェクトデータ(DATA DIVISION(データ部))が定義されている場合、「1」が設定され、定義されていない場合、「0」が設定される。オブジェクトデータ保持情報Dは、オブジェクトデータ保持情報Bと同一の情報である。すなわち、オブジェクトデータ保持情報Dには、オブジェクト定義にオブジェクトデータ(DATA DIVISION(データ部))が定義されている場合、「1」が設定され、定義されていない場合、「0」が設定される。
【0047】
なお、図2(b)および(c)に示したロードモジュール300A および300B におけるそれぞれのオブジェクトデータ保持情報CおよびDは、上述したロードモジュール300FJにおけるオブジェクトデータ保持情報CおよびDと同様の情報である。なお、ステップSB6の判断結果が「No」である場合、図2(a)に示したクラス情報ファイル400FJおよびロードモジュール300FJにおけるオブジェクトデータ保持情報BおよびDには、「0」がそれぞれ設定される。ここで、ステップSB6の判断結果が「No」となる例としては、図3に示したクラス定義(FJBASE)においてファクトリ定義がない場合である。
【0048】
図6に示したステップSA4では、オブジェクトコード生成部70は、図3に示したソースプログラム200FJのクラス定義において、メソッドが定義されているか否かを判断する。この場合、図3に示すように、ファクトリ定義においてメソッドNEWが、オブジェクト定義においてメソッドM1およびM2がそれぞれ定義されているため、オブジェクトコード生成部70は、ステップSA4の判断結果を「Yes」として、ステップSA5へ進む。なお、メソッドが定義されていない場合、オブジェクトコード生成部70は、ステップSA4の判断結果を「No」としてステップSA6へ進む。
【0049】
ステップSA5では、オブジェクトコード生成部70は、図7(d)に示したように、当該メソッド(手続き)のプロローグにロック制御ライブラリ1(図11参照)を呼び出すためのロック制御ライブラリ1呼び出し命令をロードモジュール300FJ(図2(a)参照)に組み込む。上記ロック制御ライブラリ1は、前述した排他制御に関するロックを獲得する処理を実行するためのライブラリである。さらに、オブジェクトコード生成部70は、図7(d)に示したように、当該メソッド(手続き)のエピローグにロック制御ライブラリ2(図12参照)を呼び出すためのロック制御ライブラリ2呼び出し命令をロードモジュール300FJ(図2(a)参照)に組み込んだ後ステップSA6へ進む。上記ロック制御ライブラリ2は、獲得したロックを解放する処理を実行するためのライブラリである。なお、ロック制御ライブラリ1および2における処理については、後述する。
【0050】
ステップSA6では、オブジェクトコード生成部70は、図3に示したソースプログラム200FJにおいて、たとえば、図7(a)に示すようなクラス利用者プログラムによりメソッドの呼び出しがプログラミングされているか否かを判断し、この判断結果が「No」である場合、ステップSA10へ進む。ここで、図7(a)に示したクラス利用者プログラムは、図7(b)に示したように、ファクトリオブジェクト生成ライブラリ(図9参照)の呼び出し命令、メソッド呼び出し命令をそれぞれ表している。上記ファクトリオブジェクト生成ライブラリは、前述したファクトリオブジェクトを生成する処理を実行するためのライブラリであり、その詳細については後述する。
【0051】
ステップSA6の判断結果が「Yes」の場合、ステップSA7では、オブジェクトコード生成部70は、呼び出しされるメソッドが、ファクトリ定義で定義されたファクトリメソッド(たとえば、図3に示したメソッドNEW)であるか否かを判断し、同判断結果が「Yes」である場合、ステップSA8へ進む。なお、ステップSA7の判断結果が「No」である場合、オブジェクトコード生成部70は、ステップSA9へ進む。ステップSA8では、オブジェクトコード生成部70は、ファクトリオブジェクト生成ライブラリ(図9参照)を呼び出すためのファクトリオブジェクト生成ライブラリ呼び出し命令をロードモジュール300FJ(図2(a)参照)に組み込んだ後、ステップSA9へ進む。
【0052】
ステップSA9では、オブジェクトコード生成部70は、利用者プログラム(図7参照)において呼び出しが指示されているメソッドを呼び出すための命令(メソッド呼び出し命令)をロードモジュール300FJに組み込んだ後、ステップSA10へ進む。ステップSA10では、オブジェクトコード生成部70は、全オブジェクト(この場合、ロードモジュール300FJおよびクラス情報ファイル400FJ)を出力する。これにより、ソースプログラム200FJに関するコンパイルが終了する。
【0053】
つぎに、ステップSA1でソースプログラム200A がプログラム解析部60に読み込まれると、ステップSA2では、前述した動作と同様にして、プログラム解析部60により、ソースプログラム200A の字句、構文および意味についての解析が行われた後、解析結果がオブジェクトコード生成部70に渡される。これにより、ステップSA3では、継承関係チェック部72は、ソースプログラム200A に関する継承関係チェック処理を行う。すなわち、継承関係チェック処理において、図8に示したステップSB1では、継承関係チェック部72は、前述した動作と同様にして、ソースプログラム200A に関する図4に示したクラス定義(A)において、前述したINHERITSを確認することで、Aクラスが継承しているクラスがあるか否かを判断する。この場合、図4に示したクラス定義(A)にINHERITS(FJBASE)が定義されているため、継承関係チェック部72は、判断結果を「Yes」とする。
【0054】
ステップSB3では、オブジェクトデータ検出部71は、自クラス(この場合、Aクラス)が継承しているクラス(この場合、FJBASEクラス)に関するクラス情報ファイル(この場合、クラス情報ファイル400FJ)を読み込んだ後、ステップSB4へ進む。ステップSB4では、オブジェクトデータ検出部71は、上記クラス情報ファイル400FJを確認することで、Aクラスが継承しているFJBASEクラスのクラス定義(図3参照)においてオブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを判断する。具体的には、オブジェクトデータ検出部71は、クラス情報ファイル400FJのオブジェクトデータ保持情報AまたはBに「1」が設定されているか否かを判断する。この場合、オブジェクトデータ検出部71は、クラス情報ファイル400FJのオブジェクトデータ保持情報Aに「0」が設定されているため、ステップSB4の判断結果を「No」として、ステップSB2へ進む。
【0055】
ステップSB2では、オブジェクトデータ検出部71は、自クラス(この場合、Aクラス)において、オブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを判断する。この場合、図4に示したオブジェクト定義にオブジェクトデータ(DATA DIVISION(データ部))が定義されているため、オブジェクトデータ検出部71は、判断結果を「Yes」とする。ステップSB5では、オブジェクトデータ検出部71は、上記オブジェクトデータ(DATA DIVISION(データ部))がファクトリ定義で定義されているか否かを判断する。この場合、図4に示したファクトリ定義にオブジェクトデータが定義されていないため、オブジェクトデータ検出部71は、判断結果を「No」とする。
【0056】
ステップSB8では、継承関係チェック部72は、図2(b)に示したクラス情報ファイル400A およびロードモジュール300A におけるオブジェクトデータ保持情報BおよびDにそれぞれ「1」を設定した後、図6に示したメインルーチンに戻る。ここで、上記オブジェクトデータ保持情報BおよびDに「1」が設定されていることから、AクラスまたはAクラスが継承しているFJBASEクラスのオブジェクト定義においてオブジェクトデータ(DATA DIVISION(データ部))が定義されていることがわかる。なお、ステップSB5の判断結果が「Yes」である場合には、ステップSB7では、オブジェクトデータ保持情報AおよびCに「1」が設定される。
【0057】
図6に示したステップSA4〜ステップSA9では、前述した動作と同様にして、ソースプログラム200A (Aクラス)に関する動作が行われる。そして、ステップSA10では、オブジェクトコード生成部70は、全オブジェクト(この場合、ロードモジュール300A およびクラス情報ファイル400A )を出力する。これにより、ソースプログラム200A に関するコンパイルが終了する。
【0058】
つぎに、ステップSA1でソースプログラム200B がプログラム解析部60に読み込まれると、ステップSA2では、前述した動作と同様にして、プログラム解析部60により、ソースプログラム200B の字句、構文および意味についての解析が行われた後、解析結果がオブジェクトコード生成部70に渡される。これにより、ステップSA3では、継承関係チェック部72は、ソースプログラム200B に関する継承関係チェック処理を行う。すなわち、継承関係チェック処理において、図8に示したステップSB1では、継承関係チェック部72は、前述した動作と同様にして、ソースプログラム200B に関する図5に示したクラス定義(B)において、前述したINHERITSを確認することで、Bクラスが継承しているクラスがあるか否かを判断する。この場合、図5に示したクラス定義(B)にINHERITS(A)が定義されているため、継承関係チェック部72は、判断結果を「Yes」とする。
【0059】
ステップSB3では、オブジェクトデータ検出部71は、自クラス(この場合、Bクラス)が継承しているクラス(この場合、Aクラス)に関するクラス情報ファイル(この場合、クラス情報ファイル400A )を読み込んだ後、ステップSB4へ進む。ステップSB4では、オブジェクトデータ検出部71は、上記クラス情報ファイル400A を確認することで、Bクラスが継承しているAクラスのクラス定義(図4参照)においてオブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを判断する。具体的には、オブジェクトデータ検出部71は、クラス情報ファイル400A のオブジェクトデータ保持情報AまたはBに「1」が設定されているか否かを判断する。この場合、クラス情報ファイル400A のオブジェクトデータ保持情報Bに「1」が設定されているため、オブジェクトデータ検出部71は、ステップSB4の判断結果を「Yes」として、ステップSB5へ進む。
【0060】
ステップSB5では、オブジェクトデータ検出部71は、上記オブジェクトデータ(DATA DIVISION(データ部))がファクトリ定義で定義されているか否かを判断する。この場合、図5に示したファクトリ定義にオブジェクトデータが定義されていないため、オブジェクトデータ検出部71は、判断結果を「No」とする。
【0061】
ステップSB8では、継承関係チェック部72は、図2(c)に示したクラス情報ファイル400B およびロードモジュール300B におけるオブジェクトデータ保持情報BおよびDにそれぞれ「1」を設定した後、図6に示したメインルーチンに戻る。ここで、上記オブジェクトデータ保持情報BおよびDに「1」が設定されていることから、BクラスまたはBクラスが継承しているAクラスのオブジェクト定義においてオブジェクトデータ(DATA DIVISION(データ部))が定義されていることがわかる。
【0062】
図6に示したステップSA4〜ステップSA9では、前述した動作と同様にして、ソースプログラム200B (Bクラス)に関する動作が行われる。そして、ステップSA10では、オブジェクトコード生成部70は、全オブジェクト(この場合、ロードモジュール300B およびクラス情報ファイル400B )を出力する。これにより、ソースプログラム200B に関するコンパイルが終了する。
【0063】
つぎにプログラム実行時の処理について、図9〜図12に示したフローチャートを参照しつつ説明する。以下においては、図1に示した情報処理装置10をサーバとし、このサーバに接続された複数のクライアント(図示略)が上記サーバにアクセスすることで、図2(c)に示したロードモジュール300B を実行する場合について説明する。ここで、クライアントからの起動によりスレッドが生成され、図7(a)に示したクラス利用者プログラムに応じたオブジェクトプログラムが実行されると、図9に示したファクトリオブジェクト生成ライブラリが呼び出される(図7(b)の▲1▼−1参照)。
【0064】
これにより、ステップSC1では、ファクトリオブジェクトが既に生成されているか否かが判断され、同判断結果が「Yes」である場合、処理がメインルーチンへ移行する。ここで、ファクトリオブジェクトは、Bクラスのオブジェクトインスタンスを生成するためのものであり、上記オブジェクトインスタンスが生成される前に、サーバ(情報処理装置10)側で生成されるものである。この場合、ステップSC1の判断結果が「No」であるものとすると、ステップSC2では、図7(e)に示したBクラスのファクトリオブジェクトが生成される。つぎのステップSC3では、図2(c)に示したオブジェクトデータ保持情報C(この場合「0」)が、図7(e)に示したBクラスのファクトリオブジェクトにおけるオブジェクトデータ保持情報Eの領域に複写される。
【0065】
つぎのステップSC4では、上記オブジェクトデータ保持情報Eが「1」であるか否かが判断される。このステップSC4の判断結果が「Yes」である場合、ステップSC5では、ミューテックスが作成され、これが、図7(e)に示したファクトリオブジェクトにミューテックスFとして設定される。上記ミューテックスは、セマフォのように、複数のスレッド間において一つのスレッドのみを実行可能とし、他のスレッドを実行待ち状態にするという排他制御を行うためのフラグである。この場合、オブジェクトデータ保持情報Eが「0」であるため、ステップSC4の判断結果が「No」となり、処理がメインルーチンへ移行される。
【0066】
つぎにメソッドNEW(図2(a)参照)の呼び出し命令(図7(b)の▲1▼−2参照)が実行されると、図10に示したメソッド呼び出しの処理が実行される。すなわち、ステップSD1では、メソッド(この場合、メソッドNEW)のプロローグのコードが開始され、ステップSD2では、図11に示したロック制御ライブラリ1が実行される。すなわち、ステップSE1では、実行中のBクラスのファクトリオブジェクト(図7(e)参照)のオブジェクトデータ保持情報Eの値が「1」であるか否かが判断される。この場合、上記オブジェクトデータ保持情報Eが「0」であるため、ステップSE1の判断結果が「No」となり、図10に示したメインルーチンへ処理が移行する。つぎのステップSD3では、呼び出されたメソッドがメソッドNEWであるか否かが判断され、この場合、判断結果が「Yes」となる。
【0067】
これにより、ステップSD4では、ファクトリオブジェクト(図7(e)参照)により、図7(e)に示したBクラスのオブジェクトインスタンスが生成される。つぎのステップSD6では、当該クラス(この場合、Bクラス)のロードモジュール(この場合、ロードモジュール300B (図2(c)参照))のオブジェクトデータ保持情報D(=「1」)が、図7(e)に示したBクラスのオブジェクトインスタンスにおけるオブジェクトデータ保持情報Eの領域に複写される。つぎのステップSD7では、上記オブジェクトデータ保持情報Eが「1」であるか否かが判断される。この場合、オブジェクトデータ保持情報Eが「1」であるため、ステップSD7の判断結果が「Yes」となり、つぎのステップSD8では、ミューテックスが作成され、これが、図7(e)に示したBクラスのオブジェクトインスタンスにミューテックスFとして設定される。なお、ステップSD7の判断結果が「No」である場合、処理がステップSD9へ移行する。
【0068】
ステップSD9では、図12に示したロック制御ライブラリ2が実行される。すなわち、ステップSF1では、図7(e)に示したBクラスのファクトリオブジェクトのオブジェクトデータ保持情報Eが「1」であるか否かが判断される。この場合、上記オブジェクトデータ保持情報Eが「0」であるため判断結果が「No」となり、処理が終了する。
【0069】
つぎに、メソッドM1(図2(a)参照)の呼び出し命令(図7(b)の▲2▼参照)が実行されると、図10に示したメソッド呼び出しの処理が実行される。すなわち、ステップSD1では、メソッドM1のプロローグのコードが開始され、ステップSD2では、図11に示したロック制御ライブラリ1が実行される。すなわち、ステップSE1では、実行中のBクラスのオブジェクトインスタンス(図7(e)参照)のオブジェクトデータ保持情報Eの値が「1」であるか否かが判断される。
【0070】
この場合、上記オブジェクトデータ保持情報Eが「1」であるため、ステップSE1の判断結果が「Yes」となる。つぎのステップSE2では、当該スレッドは、Bクラスのオブジェクトインスタンス(図7(e)参照)におけるミューテックスFよりロックを獲得する。つぎに、ステップSE3では、当該スレッドは、ミューテックスFを参照することで、他のスレッドが、当該オブジェクトインスタンスに関するオブジェクトデータを使用している最中であるか否かを判断する。
【0071】
ここで、すでに、他のスレッドが上記オブジェクトデータを使用している場合には、当該スレッドは、オブジェクトデータを使用できない状態にあるため、ステップSE3の判断を繰り返すことで、待機する。つまり、この場合には、Bクラスのオブジェクトインスタンス(メソッド)を実行し、このオブジェクトインスタンスに関するオブジェクトデータを使用できるスレッドは、一つに制限されるという排他制御が行われる。そして、他のスレッドがBクラスのオブジェクトインスタンスの実行を終えることにより、当該オブジェクトデータが未使用状態になると、ステップSE3の判断結果が「No」となり、待機していたスレッドは、図10に示したステップSD3へ進む。ステップSD3では、当該メソッドがメソッドM1であるため、判断結果が「No」となる。ステップSD5では、メソッドM1が実行されることで、手続きが行われる。なお、この手続き中においては、他のスレッドは、Bクラスのオブジェクトインスタンスに関するメソッドを実行することができない。
【0072】
つぎのステップSD9では、当該スレッドは、ロック制御ライブラリ2(図12参照)を実行する。すなわち、ステップSF1では、図7(e)に示したBクラスのオブジェクトインスタンスのオブジェクトデータ保持情報Eが「1」であるか否かが判断される。この場合、上記オブジェクトデータ保持情報Eが「1」であるため判断結果が「Yes」となり、ステップSF2では、当該スレッドにより、図7(e)に示したミューテックスFよりロックを解放する。これにより、他のスレッドは、Bクラスのオブジェクトインスタンスに関するメソッドを実行することが可能となる。
【0073】
以上説明したように、上述した実施の形態1によれば、ソースプログラムSPのコンパイル時に、オブジェクトデータ保持情報C、D、および排他制御命令(ロック制御ライブラリ1および2呼び出し命令)を自動的にオブジェクトプログラムOP(ロードモジュール300FJ、300A および300B )に組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータ(DATA DIVISION(データ部))のアクセス競合が容易に回避される。また、実施の形態1によれば、継承関係チェック部72によりクラスの継承関係をチェックし、このチェック結果に基づく上記オブジェクトデータ保持情報C、D、および排他制御命令(ロック制御ライブラリ1および2呼び出し命令)を自動的にオブジェクトプログラムに組み込むようにしたので、従来困難とされていた、クラスの継承関係も考慮した状態で、アクセス競合が容易に回避される。
【0074】
(実施の形態2)
さて、前述した実施の形態1においては、図2(a)〜(c)に示したようにFJBASEクラス、AクラスおよびBクラスに関して継承関係をチェックし、この継承関係を考慮してオブジェクトデータ(DATA DIVISION(データ部))に関するオブジェクトデータ保持情報CおよびDをロードモジュール300FJ、300A および300B にそれぞれ組み込む例について説明したが、これらオブジェクトデータ保持情報CおよびDを用いることなく、前述した排他制御を行うようにしてもよい、以下この場合を実施の形態2として説明する。
【0075】
なお、実施の形態2の構成が図1に示したものとほぼ同様であるため、以下においては、図1を参照して実施の形態2について説明する。ただし、実施の形態2においては、図1に示したオブジェクトコード生成部70の機能が実施の形態1の場合と異なっており、かつ継承関係チェック部72が設けられていない。このオブジェクトコード生成部70の機能の詳細については後述する。
【0076】
つぎに、実施の形態2の動作について図17に示したフローチャートを参照しつつ説明する。この実施の形態2においては、図2(a)〜(c)に示したソースプログラム200FJ、200A および200B がソースプログラムSPとして用いられるものとする。また、これらソースプログラム200FJ、200A および200B には、図13〜図15に示したクラス定義が定義されている。
【0077】
図17に示したステップSG1では、まず、ソースプログラム200FJがプログラム解析部60に読み込まれる。これにより、ステップSG2では、プログラム解析部60により、ソースプログラム200FJの字句、構文および意味についての解析が行われた後、解析結果がオブジェクトコード生成部70に渡される。これにより、ステップSG3では、オブジェクトコード生成部70は、ステップSA4(図6参照)と同様にして、図13に示したソースプログラム200FJのクラス定義において、メソッドが定義されているか否かを判断する。この場合、図13に示すように、ファクトリ定義においてメソッドNEWが、オブジェクト定義においてメソッドM1およびM2がそれぞれ定義されているため、オブジェクトコード生成部70は、ステップSG3の判断結果を「Yes」として、ステップSG4へ進む。なお、メソッドが定義されていない場合、オブジェクトコード生成部70は、ステップSG3の判断結果を「No」としてステップSG6へ進む。
【0078】
ステップSG4では、オブジェクトデータ検出部71は、図13に示したクラス定義(FJBASE)においてオブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを判断し、この場合、オブジェクトデータが定義されていないため、判断結果を「No」として、ステップSG6へ進む。ステップSG6では、オブジェクトコード生成部70は、図13に示したソースプログラム200FJにおいて、たとえば、図18(a)に示すようなクラス利用者プログラムによりメソッドの呼び出しがプログラミングされているか否かを判断し、この判断結果が「No」である場合、ステップSG10へ進む。図18(a)に示したクラス利用者プログラムは、メソッドM1がメソッドM5に変更されている点を除いて前述した図7(a)に示すものと同一である。
【0079】
ステップSG6の判断結果が「Yes」の場合、ステップSG7では、オブジェクトコード生成部70は、呼び出しされるメソッドが、ファクトリ定義で定義されたファクトリメソッド(たとえば、図13に示したメソッドNEW)であるか否かを判断し、同判断結果が「Yes」である場合、ステップSG8へ進む。なお、ステップSG7の判断結果が「No」である場合、オブジェクトコード生成部70は、ステップSG9へ進む。ステップSG8では、オブジェクトコード生成部70は、ファクトリオブジェクト生成ライブラリ(図19参照)を呼び出すためのファクトリオブジェクト生成ライブラリ呼び出し命令をロードモジュール300FJ’(図16(a)参照)に組み込んだ後、ステップSG9へ進む。
【0080】
ステップSG9では、オブジェクトコード生成部70は、利用者プログラム(図18参照)において呼び出しが指示されているメソッドを呼び出すための命令(メソッド呼び出し命令)をロードモジュール300FJ’に組み込んだ後、ステップSG10へ進む。ステップSG10では、オブジェクトコード生成部70は、全オブジェクト(この場合、ロードモジュール300FJ’)を出力する。これにより、ソースプログラム200FJに関するコンパイルが終了する。
【0081】
つぎに、ステップSG1でソースプログラム200A がプログラム解析部60に読み込まれると、ステップSG2では、前述した動作と同様にして、プログラム解析部60により、ソースプログラム200A の字句、構文および意味についての解析が行われた後、解析結果がオブジェクトコード生成部70に渡される。これにより、ステップSG3では、オブジェクトコード生成部70は、図14に示したソースプログラム200A のクラス定義において、メソッドが定義されているか否かを判断する。この場合、図14に示すように、ファクトリ定義においてメソッドM3およびM4が、オブジェクト定義においてメソッドM5およびM6がそれぞれ定義されているため、オブジェクトコード生成部70は、ステップSG3の判断結果を「Yes」とする。
【0082】
ステップSG4では、オブジェクトデータ検出部71は、図14に示したクラス定義(A)においてオブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを判断し、この場合、オブジェクト定義においてメソッドM5およびM6に関してオブジェクトデータ(DATA DIVISION(データ部))が定義されているため、判断結果を「Yes」とする。ステップSG5では、オブジェクトコード生成部70は、図16(b)に示したように、メソッドM5およびM6(手続き)のプロローグにロック制御ライブラリ1(図21参照)を呼び出すためのロック制御ライブラリ1呼び出し命令(図18(c)および(d)参照)をロードモジュール300A’(図16(b)参照)に組み込む。上記ロック制御ライブラリ1は、前述したロックを獲得する処理を実行するためのライブラリである。
【0083】
さらに、オブジェクトコード生成部70は、図16(b)に示したように、メソッドM5およびM6(手続き)のエピローグにロック制御ライブラリ2(図22参照)を呼び出すためのロック制御ライブラリ2呼び出し命令をロードモジュール300A’(図16(b)参照)に組み込んだ後、ステップSG6へ進む。ステップSG6〜ステップSG9では、前述した動作と同様にして、ソースプログラム200A (Aクラス)に関する動作が行われる。そして、ステップSG10では、オブジェクトコード生成部70は、全オブジェクト(この場合、ロードモジュール300A’)を出力する。これにより、ソースプログラム200A に関するコンパイルが終了する。
【0084】
つぎに、ステップSG1でソースプログラム200B がプログラム解析部60に読み込まれると、ステップSG2では、前述した動作と同様にして、プログラム解析部60により、ソースプログラム200B の字句、構文および意味についての解析が行われた後、解析結果がオブジェクトコード生成部70に渡される。これにより、ステップSG3では、オブジェクトコード生成部70は、図15に示したソースプログラム200B のクラス定義において、メソッドが定義されているか否かを判断する。この場合、図15に示すように、ファクトリ定義においてメソッドM7およびM8が、オブジェクト定義においてメソッドM9およびM10がそれぞれ定義されているため、オブジェクトコード生成部70は、ステップSG3の判断結果を「Yes」とする。
【0085】
ステップSG4では、オブジェクトデータ検出部71は、図15に示したクラス定義(B)においてオブジェクトデータ(DATA DIVISION(データ部))が定義されているか否かを判断し、この場合、オブジェクト定義においてメソッドM9およびM10に関してオブジェクトデータ(DATA DIVISION(データ部))が定義されているため、判断結果を「Yes」とする。ステップSG5では、オブジェクトコード生成部70は、図16(c)に示したように、メソッドM9およびM10(手続き)のプロローグにロック制御ライブラリ1(図21参照)を呼び出すためのロック制御ライブラリ1呼び出し命令(図18(c)および(d)参照)をロードモジュール300B’(図16(c)参照)に組み込む。上記ロック制御ライブラリ1は、前述したロックを獲得する処理を実行するためのライブラリである。
【0086】
さらに、オブジェクトコード生成部70は、図16(c)に示したように、メソッドM9およびM10(手続き)のエピローグにロック制御ライブラリ2(図22参照)を呼び出すためのロック制御ライブラリ2呼び出し命令をロードモジュール300B’(図16(c)参照)に組み込んだ後、ステップSG6へ進む。ステップSG6〜ステップSG9では、前述した動作と同様にして、ソースプログラム200B(Bクラス)に関する動作が行われる。そして、ステップSG10では、オブジェクトコード生成部70は、全オブジェクト(この場合、ロードモジュール300B’を出力する。これにより、ソースプログラム200B に関するコンパイルが終了する。
【0087】
つぎにプログラム実行時の処理について、図19〜図22に示したフローチャートを参照しつつ説明する。以下においては、図1に示した情報処理装置10をサーバとし、このサーバに接続された複数のクライアント(図示略)が上記サーバにアクセスすることで、図16(c)に示したロードモジュール300B’を実行する場合について説明する。ここで、クライアントからの起動によりスレッドが生成され、図18(a)に示したクラス利用者プログラムに応じたオブジェクトプログラムが実行されると、図19に示したファクトリオブジェクト生成ライブラリが呼び出される(図18(b)の▲1▼−1参照)。
【0088】
これにより、ステップSH1では、ステップSC1(図9参照)と同様にして、ファクトリオブジェクトが既に生成されているか否かが判断され、同判断結果が「Yes」である場合、処理がメインルーチンへ移行する。この場合、ステップSH1の判断結果が「No」であるものとすると、ステップSH2では、図18(e)に示したBクラスのファクトリオブジェクトが生成される。つぎのステップSH3では、ステップSC5(図9参照)と同様にして、ミューテックスが作成され、これが、図18(e)に示したファクトリオブジェクトにミューテックスFとして設定される。上記ミューテックスは、実施の形態1において説明したように、複数のスレッド間において一つのスレッドのみを実行可能とし、他のスレッドを実行待ち状態にするという排他制御を行うためのフラグである。
【0089】
つぎにメソッドNEW(図16(a)参照)の呼び出し命令(図18(b)の▲1▼−2参照)が実行されると、図20に示したメソッド呼び出しの処理が実行される。すなわち、ステップSI1では、メソッド(この場合、メソッドNEW)のプロローグのコードが開始され、ステップSI2では、メソッドNEWに関してロック制御ライブラリ1の呼び出しがあるか否かが判断される。この場合、図16(a)に示したメソッドNEWには、ロック制御ライブラリ1の呼び出し命令が組み込まれていないため、ステップSI2の判断結果が「No」となる。つぎのステップSI4では、呼び出されたメソッドがメソッドNEWであるか否かが判断され、この場合、判断結果が「Yes」となる。
【0090】
これにより、ステップSI6では、ファクトリオブジェクト(図18(e)参照)により、図18(e)に示したBクラスのオブジェクトインスタンスが生成される。つぎのステップSI7では、ステップSD8(図10参照)と同様にして、ミューテックスが作成され、これが、図18(e)に示したBクラスのオブジェクトインスタンスにミューテックスFとして設定される。なお、ステップSI4の判断結果が「No」である場合、処理がステップSI5へ移行する。
【0091】
ステップSI8では、メソッドNEWに関してロック制御ライブラリ2の呼び出しがあるか否かが判断される。この場合、図16(a)に示したメソッドNEWには、ロック制御ライブラリ2の呼び出し命令が組み込まれていないため、ステップSI8の判断結果が「No」となり、処理が終了する。このように、オブジェクトデータ(DATA DIVISION(データ部))が定義されていないメソッドNEWが実行される際には、前述したロック制御が行われないため、複数のスレッド間でメソッドNEWが同時に実行される。なお、オブジェクトデータが定義されていない他のメソッドM1、M2、M3、M4、M7およびM8(図16(a)、(b)および(c)参照)の場合も、上述したメソッドNEWの場合と同様である。
【0092】
つぎに、メソッドM5(図16(b)参照)の呼び出し命令(図18(b)の▲2▼参照)が実行されると、図20に示したメソッド呼び出しの処理が実行される。すなわち、ステップSI1では、メソッドM5のプロローグのコードが開始され、ステップSI2では、メソッドM5に関してロック制御ライブラリ1の呼び出しがあるか否かが判断される。この場合、図16(b)に示したメソッドM5には、ロック制御ライブラリ1の呼び出し命令が組み込まれているため、ステップSI2の判断結果が「Yes」となる。ステップSI3では、図21に示したロック制御ライブラリ1が実行される。すなわち、ステップSJ1では、当該スレッドは、Bクラスのオブジェクトインスタンス(図18(e)参照)におけるミューテックスFよりロックを獲得する。つぎに、ステップSJ2では、当該スレッドは、ミューテックスFを参照することで、他のスレッドが、当該オブジェクトインスタンスに関するオブジェクトデータを使用している最中であるか否かを判断する。
【0093】
ここで、すでに、他のスレッドが上記オブジェクトデータを使用している場合には、当該スレッドは、オブジェクトデータを使用できない状態にあるため、ステップSJ2の判断を繰り返すことで、待機する。つまり、この場合には、Bクラスのオブジェクトインスタンス(メソッド)を実行し、このオブジェクトインスタンスに関するオブジェクトデータを使用できるスレッドは、一つに制限される。そして、他のスレッドがBクラスのオブジェクトインスタンスの実行を終えることにより、当該オブジェクトデータが未使用状態になると、ステップSJ2の判断結果が「No」となり、待機していたスレッドは、図20に示したステップSI4へ進む。ステップSI4では、当該メソッドがメソッドM5であるため、判断結果が「No」となる。ステップSI5では、メソッドM5が実行されることで、手続きが行われる。なお、この手続き中においては、他のスレッドは、Bクラスのオブジェクトインスタンスに関するメソッドを実行することができない。
【0094】
つぎのステップSI8では、メソッドM5に関してロック制御ライブラリ2の呼び出しがあるか否かが判断される。この場合、図16(b)に示したメソッドM5には、ロック制御ライブラリ2の呼び出し命令が組み込まれているため、ステップSI8の判断結果が「Yes」となる。ステップSI9では、図22に示したロック制御ライブラリ2が実行される。すなわち、ステップSK1では、当該スレッドにより、図18(e)に示したミューテックスFよりロックを解放する。これにより、他のスレッドは、Bクラスのオブジェクトインスタンスに関するメソッドを実行することが可能となる。このように、オブジェクトデータ(DATA DIVISION(データ部))が定義されているメソッドM5が実行される際には、前述したロック制御(排他制御)が行われるため、メソッドM5を実行することができるスレッドが一つに限定される。なお、オブジェクトデータが定義されている他のメソッドM6、M9、M10(図16(b)および(c)参照)の場合も、上述したメソッドM5の場合と同様である。
【0095】
以上説明したように、実施の形態2によれば、ソースプログラムSPのコンパイル時に、排他制御命令(ロック制御ライブラリ1および2呼び出し命令)を自動的にオブジェクトプログラム(ロードモジュール300A’等)に組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータ(DATA DIVISION(データ部))のアクセス競合が容易に回避される。
【0096】
以上本発明の実施の形態1および2について図面を参照して詳述してきたが、具体的な構成例は、これら実施の形態1および2に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等があっても本発明に含まれる。たとえば、実施の形態1および2においては、前述したコンパイラ装置の機能を実現するためのコンパイラ(プログラム)を図1に示したコンピュータ読み取り可能な記録媒体120に記録して、この記録媒体120に記録されたコンパイラをコンピュータに読み込ませ、実行させることによりコンパイラ装置の機能を実現するようにしてもよい。なお、記録媒体120には、CD−ROM、光ディスク、フロッピーディスク、ハードディスク等の可搬型の記録媒体が含まれることはもとより、ネットワークのようにデータを一時的に記録保持するような伝送媒体も含まれる。
【0097】
【発明の効果】
以上説明したように、請求項1、4にかかる発明によれば、コンパイル時に、オブジェクトデータ保持情報および排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避されるという効果を奏する。
【0098】
また、請求項2、5にかかる発明によれば、コンパイル時に、クラスの継承関係をチェックし、このチェック結果に基づくオブジェクトデータ保持情報および排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、従来困難とされていた、クラスの継承関係も考慮した状態で、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避されるという効果を奏する。
【0099】
また、請求項3、6にかかる発明によれば、コンパイル時に、排他制御命令を自動的にオブジェクトプログラムに組み込むようにしたので、利用者に特段の負担をかけることなく、複数のスレッド間におけるオブジェクトデータのアクセス競合が容易に回避されるという効果を奏する。
【図面の簡単な説明】
【図1】本発明にかかる実施の形態1の構成を示すブロック図である。
【図2】同実施の形態1の動作を説明する図である。
【図3】同実施の形態1におけるクラス定義(FJBASE)を示す図である。
【図4】同実施の形態1におけるクラス定義(A)を示す図である。
【図5】同実施の形態1におけるクラス定義(B)を示す図である。
【図6】同実施の形態1の動作を説明するフローチャートである。
【図7】同実施の形態1における動作を説明する図である。
【図8】同実施の形態1における継承関係チェック処理を説明するフローチャートである。
【図9】同実施の形態1におけるファクトリオブジェクト生成ライブラリの処理を説明するフローチャートである。
【図10】同実施の形態1におけるメソッド呼び出しの処理を説明するフローチャートである。
【図11】同実施の形態1におけるロック制御ライブラリ1の処理を説明するフローチャートである。
【図12】同実施の形態1におけるロック制御ライブラリ2の処理を説明するフローチャートである。
【図13】本発明にかかる実施の形態2におけるクラス定義(FJBASE)を示す図である。
【図14】同実施の形態2におけるクラス定義(A)を示す図である。
【図15】同実施の形態2におけるクラス定義(B)を示す図である。
【図16】同実施の形態2におけるロードモジュールを示す図である。
【図17】同実施の形態2の動作を説明するフローチャートである。
【図18】同実施の形態2の動作を説明する図である。
【図19】同実施の形態2におけるファクトリオブジェクト生成ライブラリの処理を説明するフローチャートである。
【図20】同実施の形態2におけるメソッド呼び出しの処理を説明するフローチャートである。
【図21】同実施の形態2におけるロック制御ライブラリ1の処理を説明するフローチャートである。
【図22】同実施の形態2におけるロック制御ライブラリ2の処理を説明するフローチャートである。
【図23】従来例の構成を示すブロック図である。
【符号の説明】
10 情報処理装置
20 CPU
50 コンパイラ部
60 プログラム解析部
70 オブジェクトコード生成部
71 オブジェクトデータ検出部
72 継承関係チェック部
120 記録媒体
Claims (6)
- オブジェクト指向プログラミングによるソースプログラムをコンパイルすることで、スレッドの生成により実行されるオブジェクトプログラムを生成するコンパイラ装置において、
前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出する検出手段と、
前記検出手段の検出結果をオブジェクトデータ保持情報として前記オブジェクトプログラムに組み込む第1の組込手段と、
前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが当該メソッドを実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込む第2の組込手段と、
を備えることを特徴とするコンパイラ装置。 - 前記ソースプログラムにおけるクラス定義に基づいて、クラスの継承関係をチェックする継承関係チェック手段を備え、前記検出手段は、前記継承関係チェック手段のチェック結果に基づいて、当該クラスに対して継承関係にあるクラスについてもクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出し、前記第2の組込手段は、前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが、継承関係にあるクラスのメソッドも含めて実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込むことを特徴とする請求項1に記載のコンパイラ装置。
- オブジェクト指向プログラミングによるソースプログラムをコンパイルすることで、スレッドの生成により実行されるオブジェクトプログラムを生成するコンパイラ装置において、
前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出する検出手段と、
前記オブジェクトプログラムの実行時に、複数のスレッドのうち一つのスレッドのみが、前記検出手段により検出されたオブジェクトデータをアクセスするように制御する排他制御命令を前記オブジェクトプログラムに組み込む組込手段と、
を備えることを特徴とするコンパイラ装置。 - オブジェクト指向プログラミングによるソースプログラムをコンパイルさせることで、スレッドの生成により実行されるオブジェクトプログラムを生成させるコンパイラを記録したコンピュータ読み取り可能な記録媒体であって、
前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出させる検出工程と、
前記検出工程の検出結果をオブジェクトデータ保持情報として前記オブジェクトプログラムに組み込ませる第1の組込工程と、
前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが当該メソッドを実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込ませる第2の組込工程と、
をコンピュータに実行させるためのコンパイラを記録したコンピュータ読み取り可能な記録媒体。 - 前記ソースプログラムにおけるクラス定義に基づいて、クラスの継承関係をチェックさせる継承関係チェック工程を含み、前記検出工程においては、前記継承関係チェック工程のチェック結果に基づいて、当該クラスに対して継承関係にあるクラスについてもクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出させ、前記第2の組込工程においては、前記オブジェクトプログラムの実行時に、前記オブジェクトデータ保持情報に基づいて、複数のスレッドのうち一つのスレッドのみが、継承関係にあるクラスのメソッドも含めて実行するように制御する排他制御命令を前記オブジェクトプログラムに組み込ませることを特徴とする請求項4に記載のコンパイラを記録したコンピュータ読み取り可能な記録媒体。
- オブジェクト指向プログラミングによるソースプログラムをコンパイルさせることで、スレッドの生成により実行されるオブジェクトプログラムを生成させるコンパイラを記録したコンピュータ読み取り可能な記録媒体であって、
前記ソースプログラムにおけるクラス定義に基づいて、オブジェクトデータが定義されているか否かを検出させる検出工程と、
前記オブジェクトプログラムの実行時に、複数のスレッドのうち一つのスレッドのみが、前記検出手段により検出されたオブジェクトデータをアクセスするように制御する排他制御命令を前記オブジェクトプログラムに組み込ませる組込工程と、
をコンピュータに実行させるためのコンパイラを記録したコンピュータ読み取り可能な記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP18388099A JP3756352B2 (ja) | 1999-06-29 | 1999-06-29 | コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体 |
US09/479,814 US6735763B1 (en) | 1999-06-29 | 2000-01-07 | Compiler device and computer-readable recording medium with a compiler recorded therein |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP18388099A JP3756352B2 (ja) | 1999-06-29 | 1999-06-29 | コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001014173A JP2001014173A (ja) | 2001-01-19 |
JP3756352B2 true JP3756352B2 (ja) | 2006-03-15 |
Family
ID=16143456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP18388099A Expired - Fee Related JP3756352B2 (ja) | 1999-06-29 | 1999-06-29 | コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6735763B1 (ja) |
JP (1) | JP3756352B2 (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3608993B2 (ja) * | 1999-11-10 | 2005-01-12 | 富士通株式会社 | コンパイラ装置及びコンパイラプログラムを記録した記録媒体 |
US9052944B2 (en) | 2002-07-16 | 2015-06-09 | Oracle America, Inc. | Obstruction-free data structures and mechanisms with separable and/or substitutable contention management mechanisms |
JP4754004B2 (ja) * | 2009-03-05 | 2011-08-24 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
WO2010125960A1 (ja) * | 2009-04-28 | 2010-11-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチスレッド上で動作するプログラムのプログラム・コードをロック衝突が少ないプログラム・コードに変換するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム |
US9645992B2 (en) | 2010-08-21 | 2017-05-09 | Oracle International Corporation | Methods and apparatuses for interaction with web applications and web application data |
US10061618B2 (en) * | 2011-06-16 | 2018-08-28 | Imagination Technologies Limited | Scheduling heterogenous computation on multithreaded processors |
US9722972B2 (en) | 2012-02-26 | 2017-08-01 | Oracle International Corporation | Methods and apparatuses for secure communication |
US9129112B2 (en) | 2013-03-15 | 2015-09-08 | Oracle International Corporation | Methods, systems and machine-readable media for providing security services |
US9344422B2 (en) | 2013-03-15 | 2016-05-17 | Oracle International Corporation | Method to modify android application life cycle to control its execution in a containerized workspace environment |
JP6480908B2 (ja) | 2013-03-15 | 2019-03-13 | オラクル・インターナショナル・コーポレイション | アプリケーション間におけるコンピュータ間の保護された通信 |
EP3198418B1 (en) | 2014-09-24 | 2020-04-22 | Oracle International Corporation | Method to modify android application life cycle to control its execution in a containerized workspace environment |
CN109165161A (zh) * | 2018-08-30 | 2019-01-08 | 北京轩宇信息技术有限公司 | 一种针对c51语言程序中局部变量数据竞争的分析方法 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5430850A (en) * | 1991-07-22 | 1995-07-04 | Massachusetts Institute Of Technology | Data processing system with synchronization coprocessor for multiple threads |
US5506983A (en) * | 1992-07-06 | 1996-04-09 | Microsoft Corporation | Method and system for transactioning of modifications to a tree structured file |
JPH0784851A (ja) * | 1993-09-13 | 1995-03-31 | Toshiba Corp | 共有データ管理方法 |
US5465363A (en) * | 1993-12-30 | 1995-11-07 | Orton; Debra L. | Wrapper system for enabling a non-multitasking application to access shared resources in a multitasking environment |
JP3674117B2 (ja) * | 1995-11-20 | 2005-07-20 | 株式会社日立製作所 | 排他制御方法およびそれを利用したデータ管理システム並びに記録媒体 |
US5761670A (en) * | 1995-12-08 | 1998-06-02 | Sun Microsystems, Inc. | System and method for space efficient object locking using global and local locks |
US6128771A (en) * | 1996-02-09 | 2000-10-03 | Sun Microsystems, Inc. | System and method for automatically modifying database access methods to insert database object handling instructions |
US6138238A (en) * | 1997-12-11 | 2000-10-24 | Sun Microsystems, Inc. | Stack-based access control using code and executor identifiers |
US5946487A (en) * | 1996-06-10 | 1999-08-31 | Lsi Logic Corporation | Object-oriented multi-media architecture |
US5862376A (en) * | 1996-06-24 | 1999-01-19 | Sun Microsystems, Inc. | System and method for space and time efficient object locking |
US6161121A (en) * | 1996-07-01 | 2000-12-12 | Sun Microsystems, Inc. | Generic transfer of exclusive rights |
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 |
AU731871B2 (en) * | 1996-11-04 | 2001-04-05 | Sun Microsystems, Inc. | Method and apparatus for thread synchronization in object-based systems |
US6167423A (en) * | 1997-04-03 | 2000-12-26 | Microsoft Corporation | Concurrency control of state machines in a computer system using cliques |
FR2762418B1 (fr) * | 1997-04-17 | 1999-06-11 | Alsthom Cge Alcatel | Procede de gestion d'une memoire partagee |
US5946711A (en) * | 1997-05-30 | 1999-08-31 | Oracle Corporation | System for locking data in a shared cache |
GB2327134B (en) * | 1997-07-08 | 2002-04-03 | Ibm | Apparatus,method and computer program for providing arbitrary locking requesters for controlling concurrent access to server resources |
KR100593568B1 (ko) * | 1997-08-28 | 2006-06-28 | 시게이트 테크놀로지 엘엘씨 | 객체 지향 데이터 저장 장치상의 객체 재구성 |
US6026401A (en) * | 1997-10-14 | 2000-02-15 | International Business Machines Corporation | Locking tool data objects in a framework environment |
US6317868B1 (en) * | 1997-10-24 | 2001-11-13 | University Of Washington | Process for transparently enforcing protection domains and access control as well as auditing operations in software components |
US6134594A (en) * | 1997-10-28 | 2000-10-17 | Microsoft Corporation | Multi-user, multiple tier distributed application architecture with single-user access control of middle tier objects |
US6237043B1 (en) * | 1997-11-19 | 2001-05-22 | International Business Machines Corporation | System and method for adding highly optimized synchronization capability to objects at run-time |
US6047377A (en) * | 1997-12-11 | 2000-04-04 | Sun Microsystems, Inc. | Typed, parameterized, and extensible access control permissions |
US6182186B1 (en) * | 1998-06-30 | 2001-01-30 | Sun Microsystems, Inc. | Method and apparatus that utilizes lock states to lock resources |
US6141794A (en) * | 1998-10-16 | 2000-10-31 | Sun Microsystems, Inc. | System and method for synchronizing access to shared variables in a virtual machine in a digital computer system |
US6154741A (en) * | 1999-01-29 | 2000-11-28 | Feldman; Daniel J. | Entitlement management and access control system |
US6173442B1 (en) * | 1999-02-05 | 2001-01-09 | Sun Microsystems, Inc. | Busy-wait-free synchronization |
US6330714B1 (en) * | 1999-02-08 | 2001-12-11 | International Business Machines Corporation | Method and computer program product for implementing redundant lock avoidance |
-
1999
- 1999-06-29 JP JP18388099A patent/JP3756352B2/ja not_active Expired - Fee Related
-
2000
- 2000-01-07 US US09/479,814 patent/US6735763B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US6735763B1 (en) | 2004-05-11 |
JP2001014173A (ja) | 2001-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3756352B2 (ja) | コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体 | |
US5504901A (en) | Position independent code location system | |
US6519767B1 (en) | Compiler and method for automatically building version compatible object applications | |
US20040205729A1 (en) | Compiler system, compiling method, and storage medium for storing compiling program | |
US7536678B2 (en) | System and method for determining the possibility of adverse effect arising from a code change in a computer program | |
JP2010204979A (ja) | コンパイル方法及びコンパイラ | |
US7694289B2 (en) | Method for embedding object codes in source codes | |
JP2001243079A (ja) | 情報処理システム | |
JP2004265371A (ja) | マークアップ内でサブクラスを宣言的に定義し、使用するためのシステムおよび方法 | |
US6973645B2 (en) | Compiler, operation processing system and operation processing method | |
US20090265697A1 (en) | Methods, Devices and Software Applications for Facilitating a Development of a Computer Program | |
JPH0869381A (ja) | コンパイル方式 | |
Duncan | Objective-C Pocket Reference: A Guide to Language Fundamentals | |
KR20120114926A (ko) | 바이너리 실행파일 생성을 위한 프로그래밍 방법 | |
Taylor | The GNU configure and build system | |
Papi et al. | Pluggable type-checking for custom type qualifiers in Java | |
Benson et al. | The OpenVMS mixed pointer size environment | |
JPH04250530A (ja) | プログラム変換/翻訳装置 | |
Klimt et al. | On the Challenge of Sound Code for Operating Systems | |
JP2001142719A (ja) | コンパイラ装置及びコンパイラプログラムを記録した記録媒体 | |
Mladenović et al. | Adding Support for the MIPS32 Architecture Into the Go Language Compiler | |
JPH0196741A (ja) | デバッガにおける共通セクション方式 | |
Blume | The SML/NJ Compilation and Library Manager | |
Lee | Extending the Java language for the prevention of data races | |
JP2686801B2 (ja) | マイクロコンピュータのプログラム開発ツール |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050906 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050913 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051107 |
|
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: 20051220 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20051221 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100106 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110106 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110106 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120106 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130106 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130106 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140106 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |