JPH10254716A - マルチスレッデッドプログラムにおけるコンカレントエラーの検出 - Google Patents
マルチスレッデッドプログラムにおけるコンカレントエラーの検出Info
- Publication number
- JPH10254716A JPH10254716A JP10058064A JP5806498A JPH10254716A JP H10254716 A JPH10254716 A JP H10254716A JP 10058064 A JP10058064 A JP 10058064A JP 5806498 A JP5806498 A JP 5806498A JP H10254716 A JPH10254716 A JP H10254716A
- Authority
- JP
- Japan
- Prior art keywords
- lock
- lockset
- thread
- concurrent
- address
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3636—Debugging of software by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3644—Debugging of software by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/524—Deadlock detection or avoidance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
るに際し、コンカレントエラーを検出すること。 【解決手段】 コンピュータによって実施される方法
は、プログラムにおけるコンカレントエラーを検出す
る。複数のプログラムスレッドの機械イメージは、スレ
ッドのコンカレント状態をもたらす命令を捜し出し置き
換えるようにインストルメントされる。複数のスレッド
が実行されている間に、コンカレント状態情報はメモリ
に記録される。この記録されたコンカレント状態情報
は、分析され、一致しない動的コンカレント状態遷移
が、コンカレントエラーとして報告される。
Description
ピュータシステムにおいてプログラムスレッドをコンカ
レントに実行することに関し、より詳細に述べるなら
ば、コンカレントエラーを検出することに関するもので
ある。
おいては、処理をスピードアップするために、多重実行
パスまたは“スレッド”が使用されうる。例えば、ユー
ザとの対話は、フォアグラウンドスレッドによって取り
扱われうるが、一方、データベース更新の如き計算集中
オペレーションは、バックグランドスレッドによって取
り扱われうる。また、性能を改善するために、パラレル
スレッドが多重プロセッサにて実行されうる。
である。一つの型のコンカレントエラーは、“デッドロ
ック”、すなわち、デッドロック状態である。例えば、
スレッドAが共用リソースXを所有し、また、リソース
Yを獲得することを必要とするような場合に、デッドロ
ック状態が存在する。リソースYは、リソースXを獲得
することを必要としている第2のスレッドBによって所
有されている。この結果、リソースのコンフリクトが生
ずる。典型的には、デッドロック状態により、システム
の意図された機能が停止させられてしまう。
競合状態である。データ状態がスレッド実行のスピード
およびオーダーに依存する場合に、競合状態が存在しう
る。例えば、あるスレッドは、他のスレッドによって書
き込まれるアドレスのデータを読み出す必要があるかも
しれない。読み出される実際のデータは、個々のスレッ
ドにより読み取りおよび書き込みのオーダーに依存す
る。このような競合状態から生ずる非決定論により、そ
のプログラムはエラーを含む結果を生じてしまう。
エラーを静的にチェックするものである。典型的には、
従来の技術は、プログラムが正しい、すなわち、“真”
であるという定理を立証している。
クセスシーケンスは、スレッドが実行されている間に、
動的に変化することがあるということが問題である。こ
のような変化は、静的チェッカーでは検出し得ない。し
たがって、コンカレントエラーを動的にチェックするこ
とが望まれている。
ンカレントエラーを検出するためのコンピュータによっ
て実施される方法が提供される。多重プログラムスレッ
ドの機械語は、スレッドのコンカレント状態をもたらす
命令を捜し出して置き換えるようにインストルメントさ
れる。置換命令は、モニターのプロシージャをコールす
る。
の範囲の請求項1に限定されたような、プログラムにお
けるコンカレントエラーを検出するためのコンピュータ
によって実施される方法にある。
は、多重スレッドが実行されている間、メモリにコンカ
レント状態情報を記録する。その記録されたコンカレン
ト状態情報は、分析され得て、一致しないコンカレント
状態遷移は、コンカレントエラーとして報告され得る。
る命令であるのが好ましい。この場合において、記録さ
れた状態情報は、ロックのロッキングオーダーである。
ロッキングオーダーにおけるサイクルは、デッドロック
状態を示している。
が、シャドーヒープに維持される。これは、メモリアロ
ケーションおよびデアロケーション命令を捜し出し置き
換えることによって行われうる。この場合において、記
録された状態情報は、データがアクセスされるオーダー
に関連付けられている。一致しないアクセスオーダー
は、データ競合状態として報告される。
明の実施の形態について、本発明をより詳細に説明す
る。
レントエラーを動的に検出するのに使用されうるプロセ
ス100を示す。プログラマーは、通常のプログラミン
グ方法を使用してソースプログラム110を作成する。
ソースプログラム110は、処理されるとき、コンピュ
ータシステム(CPU)190において同時に実行され
るようになっている。コンピュータシステム190は、
1つのメモリおよび1つのプロセッサを含むか、関連し
て使用される複数のメモリおよびプロセッサを含む。プ
ログラム110は、コンパイラ111によってオブジェ
クトモジュール(thread obj)120へとコンパイルさ
れる。
間そのソースプログラムの挙動に関して報告を行なうた
めのモニタープログラム130も作成される。ソースプ
ログラム110の実行に関してモニタープログラム13
0が如何にして報告を行なうことができるかについての
詳細については、後述する。モニタープログラム130
は、コンパイラ131によってオブジェクトモジュール
(mon obj)121へとコンパイルされる。リンカー14
0は、オブジェクトモジュール120−121を機械イ
メージ(.exe) 150へとリンクする。機械イメージ1
50は、“バイナリー”プログラムまたは“テキスト”
として知られている。スレッドの実行に関する報告をす
るためのイメージ150の統合部分は、“モニター”1
55と称される。
は、コンパイラー111および131によって作成され
たシンボルテーブル141にアクセスしうるということ
である。シンボルテーブル141を使用して、リンカー
140は、例えば、オブジェクトモジュールの間で共通
なプロシージャコールおよびデータレファレンスを分析
しうる。また、ここで注意すべきことは、プログラムの
コンパイリングおよびリンキングにより、プログラムの
テキスト部分150と共に通される定数値を記憶するデ
ータセクション(data)151が発生されうるというこ
とである。一つの実施例として、プログラムテキストま
たは機械イメージ150は、機械命令、例えば、オペラ
ンドおよびオペレータのみを含む。すべてのデータは、
データセクション151に別々に記憶される。
ー160によって変更され、すなわち、“パッチ”され
る。インストルメンテーションは、イメージ150の選
択された命令を捜し出し置き換えるプロセスである。使
用されうるインストルメンターの例は、1996年7月
3日にShrivastava 氏等に与えられた米国特許第553
9907号「System for Monitoring Computer System
Performance 」に開示されている。
の置換命令でオーバーライトされる。例えば、置換命令
は、サブルーチンへの飛び越し命令(jsr)171であり
うる。jsr 命令は、モニター150のプロシージャ17
3のうちの一つを“コール”(172)することができ
る。プロシージャ173は、選択された命令がまさに実
行されようとしている時の、システムのコンカレント状
態を調べ、記録し、分析するように構成されている。
するために、コール172は、インライン命令として実
施されうる。すなわち、インライン命令は、プロシージ
ャ173を実施する。したがって、以下の説明において
は、コール172は、呼び出されるルーチンのサブルー
チンコールまたは等価なインライン命令を意味してい
る。
後、この機械語は、システムのメモリに記憶される。こ
のために、インストルメンテーションは、“バイナリー
リライト”として知られている。
ってプロセッサ190へロードされうる。プログラムを
実行している間に、挿入された“コール”172は、ス
レッド実行をインタセプトする。プロシージャ173
は、システムについての選択されたコンカレント状態情
報195を記録する。記録された状態情報は、それら状
態に関してプログラムの挙動を報告196するために分
析されうる。
キング、または、一致しないオーダーにおけるデータの
記憶は、コンカレントエラーを反映していることがあり
うる。モニタープロシージャ173の完了後、置換され
た命令が実行でき、プログラムスレッドの通常の実行
は、サブルーチンからの復帰命令174を介して再開さ
れうる。コンカレントエラーは、プログラムが実行され
ている間、または、モニタリングの完了後に報告されう
る。
れる特定の命令171は、どのスレッドコンカレント状
態を分析し報告すべきかに依存している。デッドロック
状態を検出するために、ロックを獲得し解放させるのに
使用されるプロシージャをコールするすべての機械命令
がインストルメントされる。競合状態を検出するため
に、ロックを獲得し解放させるのに使用されるプロシー
ジャをコールするすべての機械命令がインストルメント
され、それに加えて、データアクセス命令、例えば、ロ
ードおよびストア、並びに、メモリアロケーションおよ
びデアロケーションコールもインストルメントされる。
トエラーの検出について説明する。システム190にお
いて、複数のスレッド(A、B、C)211−213が
命令をコンカレントに実行している。スレッド211−
213は、それらのアクティビィティー、例えば、共用
リソースへのアクセスを同期するためロック(a、b、
・・・、e、f)へアクセスする。
に、スレッドは、関連するロックを獲得するためにコー
ル221をなす。そのロックをホールドすることによ
り、そのスレッドは、他のスレッドが同じ共用リソース
を使用しないようにすることができる。そのアクティビ
ィティーが完了したときに、コール222がそのロック
を解放する。単一のコールが複数のロックを獲得し、ま
たは解放することもありうる。マニピュレートされる特
定のロックは、コール221−222のアーギュメント
として通されうる。もし、所望のロックが使用できない
場合、例えば、そのロックが他のスレッドによってホー
ルドされている場合には、その獲得しようとしているス
レッドは、そのロックが使用できるようになるまで、待
ち状態にホールドされうる。
の方法によれば、ロックが正しく獲得されるべきオーダ
ーが予め規定される。これは、マルチプロセスおよびマ
ルチスレッデッドプログラムにおけるロックの獲得をマ
ネージするための普通のディシプリンである。反例とし
て、スレッドAは、ロックaをホールドし、スレッドB
は、ロックbをホールドする。前に進むためには、スレ
ッドAもロックbを必要とし、スレッドBは、ロックa
を必要とする。獲得オーダーが競合するこのような場合
には、どちらのスレッドも前に進めない。これは、デッ
ドロックのクラシカルなケースである。
アクティビィティーを同期するために数千のロックが使
用されうる。一致したロッキング挙動は、ある程度まで
は、静的にモニターされうる。もし、ロックが獲得され
るオーダーが特定の実行に依存している場合には、デッ
ドロック状態を検出することは非常に難しいものとな
る。何故ならば、ことなるロッキングオーダーにおける
置換の数は、非常に大きくなるからである。
レッドが実行されている間におけるロックが獲得され解
放されるオーダーに関連したコンカレント状態情報を記
憶するデータ構造を維持する。この状態情報は、プログ
ラムが一般的な使用のために利用できるようにされる前
に、ロッキングオーダーにおけるエラーを検出するため
に分析されうる。
ジメントプロシージャをロックするすべてのコール17
1を捜し出しパッチする場合には、1つのロックが獲得
され、または、解放される毎に、それらスレッドの実行
フローは、図1のプロシージャ173の1つによってイ
ンタセプトされうる。
スレッドに対して1つのロックセット230を維持す
る。1つのロックが獲得されるときはいつでも、そのロ
ックは、そのスレッドに関連したロックセット230の
メンバーとなる。そのロックが解放されるとき、そのロ
ックは、そのセットから削除される。例えば、もし、ス
レッドAがロックa、b、cを獲得し、後でロックbを
解放する場合には、そのロックセットは、メンバー
{a、c}を有する。
0にすべてのロック獲得を記録する。図3に示されるよ
うに、獲得されたロックは、順序付けされたペア301
−312として次のように記録される。例えば、スレッ
ドAは、順に、ロックa、b、cを獲得する。ロックb
が獲得されるとき、そのペア(a、b)301は、その
ログに記録される。これは、ロックbがロックaの後で
獲得されたことを示している。その後、スレッドがロッ
クcを獲得するとき、それらペア(a、c)および
(b、c)もまた記録される。何故ならば、ロックaお
よびbは、共に、ロックcが獲得されたときでも、スレ
ッドAのロックセットのメンバーであるからである。
ロッキングオーダーが変更されない場合には、そのオー
ダリング関係を利用する最適化が可能である。このよう
な最適化において、1つのスレッドによってホールドさ
れるロックのセットは、最も前に獲得されたものから、
最も最近に獲得されたものまで、時間的順序にて維持さ
れる。このような最適化でもって、新しいロックがある
スレッドによって獲得されたときには、最も最近に獲得
されたロックおよび今獲得されつつあるロックからなる
ペアがログに記憶される。
スレッドがあるロックを獲得するときはいつでも、ある
ペアが、そのスレッドのロックセットの現在のメンバー
とその新しく獲得されるロックとの組合せ毎に、ロック
ログ300に記憶される。換言するばらば、それらペア
は、ロッキングのオーダーを表している。もし、ロック
ログ300が既に同一ペアを記録している場合には、そ
の新しいペアは、記録されない。すなわち、そのログ
は、独自のペアのみを記憶する。ことなるオーダーにて
獲得されたロックを表す2つのペア、例えば、(a、
b)と(b、a)とは同一ではない。
cおよびdを獲得しているスレッドBを示している。そ
の後で、スレッドAは、ロックaおよびcを解放した
が、ロックd、eおよびfを獲得した。それから、スレ
ッドBは、ロックa、cおよびdを解放し、ロックfお
よびbを獲得する。最後のロック獲得は、ログ300に
おいてペア(f、b)312として反映されている。
表示400を示している。ここで、各ロックは、ロック
オーダリンググラフ400におけるノード401−40
3であり、ノードのペア間の方向付けエッジ404−4
05は、それらロックが獲得された相対的オーダーを示
している。
れば、反対方向における2つの相互接続エッジ404お
よび405を有するノード402および403が生ずる
ことは明らかである。これは、サイクルと称される。サ
イクルは、スレッドが競合オーダーにてロックを獲得し
ていることを示している。方向付けグラフにおけるサイ
クルは、ロックログ300のペアに関してトポロジカル
ソートを行うことによって検出されうる。
ルソートについては、D.Knuth 氏による「The of Progr
amming, VolumeI, Fundamental Algorithms, Addison-
Wesley, 1968, pp.258-268」に一般的に開示されてい
る。サイクルは、潜在的なデッロック状態の証拠であ
り、したがって、報告される。
ンググラフ400にサイクルがないことは、そのプログ
ラムが絶対的にデッドロックのないことを意味するもの
でないということである。何故ならば、他のリソース同
期化機構がデッドロック状態に巻き込まれうるからであ
る。さらに、スレッドが異なるオーダーにおいてロック
を獲得するようにさせる入力データの別のセットもあり
うる。一般的に、コンカレントエラーを動的にチェック
しても、そのプログラムの特定の実行についてスレッド
が適切にロックすることを立証することができるだけで
ある。
合状態である。競合状態は、複数のスレッドが同一アド
レスのデータにアクセスするときに起こる。例えば、2
つのスレッドの両者が変更する意図をもってデータを読
み取る。この場合において、最終データ状態は、どちら
のスレッドが最初に完了するかに依存している。
は、スケジュラーは、任意のオーダーにおいてスレッド
を実行する自由を有しており、同期化の制約のみを受け
る。マルチプロセッサシステムにおいては、実行は、例
えば、異なるプロセッサのキャッシュミスおよびその他
のロード条件に依存した異なるスピードで行われうる。
したがって、もし、完了時間が動的に変化する場合に
は、最終データ状態も変化しうる。
場合には、データ競合は避けられうる。大きなプログラ
ムの複数のスレッドの間では、どのロックがどのデータ
に関連しているのかを静的に確認することは難しい。
を検出するのに使用されうるデータ構造を示している。
ランダムアクセスメモリ(RAM)500は、“ヒー
プ”510のアドレスにデータを記憶する。ヒープ51
0は、データを共用するために複数のプログラムスレッ
ドによってコンカレントにアクセスされうる。
ドレスに記憶される。これらアドレスは、仮想メモリア
ドレスでありうる。これは、ダイナミック物理メモリ
(DRAM)の総量がアドレスされうるものよりも少な
いことを意味している。1つのありうる仮想メモリシス
テムにおいては、アドレス511は、32ビット値とし
て表され得て、メモリの4ギガバイトのアドレッシング
を可能とする。物理メモリとしては、そのうちの少量部
分のみしか実施され得ない。ここで理解すべきことは、
これは、多くの変化のうちの1つのみであり、例えば、
64ビットワードしか使用され得ないということであ
る。
ープ520もまた維持される。これは、アドレス511
とアドレス521との間の1対1の対応501があるこ
とを意味している。シャドーヒープ520は、アクセス
コンカレント状態情報を記憶するのに使用される。これ
は、ヒープのあるアドレスのデータがアクセスされると
きはいつでも、アルゴリズムがそのように要求する場合
には、現在のデータアクセスコンカレント情報は、シャ
ドーヒープ520の対応するアドレスにて更新される。
れる。ヒープ(ロードおよびストア)のアドレスにアク
セスするすべての命令171は、モニター155のプロ
シージャ173へのコール172によって置き換えられ
る。さらに、ヒープ510のアドレスをアロケートおよ
びデアロケートするプロシージャへの機械語150によ
るコールは、手順をモニタリングするコールで置き換え
られる。この後のアクティビィティーは、シャドーヒー
プ520がそのヒープ510のアドレスを正確に反映す
るようにするために行われる。
の1つにおけるワード600を示している。このワード
600は、2つのフィールド、すなわち、アクセス状態
フィールド610と、ロックセット状態フィールド62
0とを有している。後述するように、ある特定の実施に
おいては、状態フィールド620は、2つのサブフィー
ルド621−622を含み得る。アクセス状態フィール
ド610は、1から3ビット、例えば、アクセス
(A)、共用(S)および読取り/書込み(R/W)6
11、612および613を有しうる。
の対応するアドレスがアロケートされるとき、シャドー
ヒープ520にアロケートされうる。ワード600は、
すべてのビットを零へセットするように初期化されう
る。これは、ヒープアドレスの対応するワードが決して
アドレスされていないことを示している。ヒープにおけ
るワードのデアロケーション時には、そのシャドーヒー
プの対応するワードがデアロケートされ、それが以前に
記憶していたどの情報も失われる。このデアロケーショ
ンは、ライブラリデアロケーションルーチンに対するプ
ログラムにおける明示コールを通して起こりうるか、ま
たは、後述するように注釈されたガーベジコレクターの
如き自動記憶リクラメーションルーチンを通して起こり
うる。
のに使用されうるプロセス700を示している。図2の
任意のスレッド211がステップ710でまさにヒープ
510のアドレスのデータにアクセスしようとすると
き、ステップ720において、シャドーヒープ520の
対応するアドレスがアロケートされていたかを決定す
る。シャドーヒープアドレスがないことにより、ステッ
プ725においてヒープ510のアロケートされていな
い部分にアクセスする誤った試みが検出される。
憶された値が零(ステップ730における以前のアクセ
スのない)である場合には、ステップ732において、
状態フィールド610のアクセスビット711を論理
“1”へセットし、ステップ735において、アクセス
しているスレッドに関連した現在のロックセットをロッ
クセットフィールド620へ書き込む。置換された命令
を実行した後、そのスレッドの実行を再開する。ロック
セットがどのようにしてシャドーヒープ520のアドレ
スに記憶されかについては、後で詳述する。後述するよ
うに実際には、ロックセット状態フィールド620は、
そのロックセットが記憶されるアレー素子に対するポイ
ンタを記憶する。したがって、ロックセットの“書き込
み”は、ワード600のポインタの記憶を意味してい
る。
スにより、アクセスビット711が零でないことが検出
される。この場合において、アドレスにアクセスしてい
るスレッドのロックセットとシャドーアドレスに記憶さ
れたロックセットとのインターセクションをとり、ステ
ップ740において残りのロックセットをロックセット
フィールド620に記憶する。もし、インターセクショ
ンをとった後ロックセットフィールド620がステップ
750において空である場合、例えば、共通の未決定の
ロックがない場合には、ステップ755においてそのア
ドレスに対するデータ競合状態がありうるか、または、
さもなければ、戻る。アドレスをデアロケートすること
により、ワード600は、その初期のすべてゼロ値へと
リセットさせられる。
する可能性がある。これらは、誤りアラームとして知ら
れている。誤りアラームは、単一のスレッドのみがデー
タをアクセスしている場合に起こりうる。
より弁別しうるコンカレント検出を行うように修正され
うるかを示している。この変形においては、もし、アク
セスビット711が非零である場合に、付加的なチェッ
クが共用ビット712に関してなされる(ステップ76
0)。共用ビット712が零である間、スレッド識別子
が、シャドーアドレスのフィールドに記憶される。
ット712がなおも零である場合には、アクセスしてい
るスレッドの識別子が、シャドーアドレスに記憶された
識別子と比較される。もし、それら識別子が異なる場合
には、共用ビット712は、少なくとも2つのスレッド
がそのアドレスにアクセスしたことを示すために、論理
“1”にセットされる。
“1”へセットされるまでは、シャドーアドレスに記憶
されない。何故ならば、そのアドレスが1つより多いス
レッドによって共用されるまでは、エラーチェックを行
う必要がないからである。スレッド識別子およびロック
セットは同時にシャドーアドレスに記憶される必要はな
いので、シャドーアドレスの同じフィールド620が、
異なる時間にてこれらの値を記憶するのに使用されう
る。
り、そのプロセスは、ステップ735においてシャドー
アドレスのロックセットフィールド620にそのスレッ
ドのアイデンティティを単に書き込む。この場合におい
て、ロックセットは、同じスレッドがそのアドレスのデ
ータにアクセスし続ける限り、もはやインターセクトさ
れない。もし、共用ビット711が“1”にセットされ
る場合には、空のセット740および750についてイ
ンターセクトし、チェックする。
ーションに対しては粗過ぎて、なおも誤りアラームを生
ずる可能性がある。例えば、多くのデータ処理システム
においては、多くのスレッドがその後にこれらのアドレ
スを読み取ることがあるとしても、多くのアドレスが1
つのスレッドによって一度初期化されるが、決して再び
書き込まれない。この場合において、ロックは、それが
最後に書き込まれたときに、そのアドレスを保護するた
めに必要とされない。したがって、前述したコンカレン
トチェッキング方法は、多くの誤りアラームを報告する
可能性がある。
ト613は、この問題を克服するのに使用される。この
ビットは、共用ビット612がセットされるまでは、無
視される。共用ビット612がセットされるとき、R/
Wビット613は、次の書き込みアクセス時に“1”に
セットされる。もし、共用ビット612が書き込みアク
セスによりセットされる場合には、R/Wビット613
もまたすぐにセットされる。
クセット620に対する更新は、R/Wビット613の
状態とは関係なく、通常のように進められる。R/Wビ
ット613の作用は、ビットが零であるときに、エラー
メッセージを抑圧することである。何故ならば、少なく
とも2つのスレッドがあるアドレスのデータにアクセス
しておらず(共用ビット612は“1”にセットされ
る)且つそのアドレスの共用後にそれらスレッドの少な
くとも一方によってそのアドレスが書き込まれていない
(R/Wビットが“1”にセットされる)限り、アクセ
スエラーは起こり得ないからである。
ング取決めは、1つより多いロックで単一のアドレスに
記憶されるデータを保護する。この取決めにおいては、
スレッドは、データが変更される前に、すべてのロック
を獲得しなければならないが、1つのスレッドは、その
データを読み取るために1つのロックを必要とするだけ
である。本発明の方法は、このようなプログラミング取
決めを受け入れるように変更されうる。ある書き込みア
クセス時に、そのプロセスは、前述したように、シャド
ーアドレスを更新しうる。ある読み取りアクセス時に、
空セットに対するロックセットインターセクションおよ
びテストが前述したように行われる。しかしながら、こ
の場合において、シャドーアドレスに記憶されたロック
セットは、インターセクトされたセットで更新されな
い。
が2つのモード、すなわち、読み取りモードおよび書き
込みモードのうちの一方において獲得されうるような単
一ライター/多重リーダーロックを取り扱うように更に
改良されうる。もし、あるスレッドが書き込みモードに
おいてあるロックを獲得する場合には、そのスレッド
は、他のスレッドがどのような場合でもロックをホール
ドしないように保証される。もし、あるスレッドが読み
取りモードにおいてそのロックを獲得する場合には、他
のスレッドが書き込みモードにおいてロックをホールド
しないことが保証されるだけである。
り、多重スレッドがあるアドレスに記憶されたデータを
コンカレントに読み取れるようにされる。これは、多重
ロックでアドレスを保護する概念に類似している。しか
しながら、実施のための考え方は、本発明のコンカレン
トエラー検出法においてロックを受け入れる仕方のよう
に、異なる。
セットのみが1つのスレッドに関連付けられている。ロ
ックがそのスレッドによって獲得され解放されるとき
に、ロックはそのセットに加えられ、そのセットから除
かれる。単一ライター/多重リーダーロックを受け入れ
るために、2つのロックセット、すなわち、読み取りセ
ットおよび書き込みセットが各スレッドに関連付けられ
る。
れは、両方のセットに加えられ、そのロックは、そのロ
ックが解放されるときに、それら2つのセットから除か
れる。読み取りロックの場合には、そのロックが読み取
りセットに加えられ、読み取りセットから解放されるだ
けである。シャドーアドレスでの情報の処理は、読み取
りアクセス中に読み取りセットのみが使用され、書き込
みアクセス中に書き込みセットが使用されること以外
は、前述したものと同様である。
対するポインターをオルガナイジングするための好まし
い仕方についてより詳細に説明する。図9は、複数のロ
ックセット901−907を含むアレー900を示して
いる。このアレー900における各エントリーは、ロッ
クの独自のセットである。実際には、異なるロックセッ
トの数は、小さく、したがって、テーブル900は、大
抵の場合において、メインメモリに記憶されうる。テー
ブル900のエントリーは、特定のモニタリングセッシ
ョン中において恒久的なものである。これは、それらエ
ントリーが変更されず、テーブル900から削除されな
いことを意味している。
ロックセットに関連付けられる。この識別子は、アレー
900へのインデックスである。テーブル900におけ
るエントリーは、エントリー“0”から始まって順次、
エントリー“1”、・・・等々の如く発生されていく。
アレーへのインデックスは、そのエントリーの識別子で
ある。図6のロックセット状態フィールド620に実際
に記憶されるのは、これらの識別子である。
トリーは、1回より多くはアレー900に加えられな
い。したがって、補助ハッシュテーブル1100が維持
される。一つのロックセットエントリーがアレー900
に発生される毎に、ハッシュテーブルエントリー111
0も発生される。ハッシュキー値は、ハッシングファン
クションをロックセットに直接に適用することによって
導出される。ロックセット識別子(アレーインデック
ス)は、対応するハッシュテーブル値に記憶される。し
たがって、オペレーション中、ロックセットは、独自に
識別されうる。
に、競合状態を検出するためのこれらの方法の使用によ
り発生される結果は、モニターされる特定のプログラム
実行に依存している。異なる入力データまたは事象のわ
ずかに異なるシーケンスにより、プログラムを通しての
実行パスが異なってくることがある。このために、この
方法を使用するときには、起こりうる競合状態のすべて
が検出されるというわけにはいかないことがありうる。
実際に同期化がロッキング以外のあるメカニズムにより
起きたときや、競合状態が実際に起きえないときに、潜
在的競合状態が報告されることがありうる。
るべきプログラムに注釈を付けることができる。プログ
ラム注釈は、プログラマーの意図を示すためにそのプロ
グラムに付される“シグナル”である。注釈は、プログ
ラムの実行に影響を与えないものである。一つの効果と
して、注釈は、コンカレントエラー検出プロセスを改良
するために実行中にチェックされうる。
メントでの“ナル”プロシージャへのコールの形であり
うる。このナルプロシージャは、その名が意味するよう
に、正規の実行フローへの戻りにほかならない。ナルプ
ロシージャへのコールは、インストルメンター160に
よって識別されうる。これらのコールは、アーギュメン
トを解釈するモニター155のプロシージャ173への
コールによって置き換えられうる。別の仕方として、注
釈は、モニターのプロシージャへのコールの形でもあり
うる。これらのプロシージャは、シンボルテーブル14
1にて識別されうる。
が読み取り命令によって共用モードにてアクセスされう
るだけのものであるメモリアドレスに対するものである
ことを示すことがありうる。別の注釈は、アロケートさ
れるメモリがそのスレッドに対して専用であることを示
すことができる。明らかなように、このような注釈は、
誤りアラームの数を減少させうるものである。
釈の別の例として、プログラムに使用されるロッキング
オーダーが変更されていることを示す注釈がある。例え
ば、このような注釈は、ロッキングオーダーにおけるロ
ックの位置が変更され且つそれを含むすべてのペアがロ
グから除去されるべきであったことを示すことがありう
る。
グラムが自動記憶リクラメーション(ガーベジコレクシ
ョン)を与える場合には、モニターに対するコールの形
の注釈は、記憶のあるレンジがリクラメートされてお
り、シャドーヒープからデアロケートされるべきである
ことを示すために、プログラムのソースに含まれうる。
たのであるが、これらの実施例の種々な変形態様が考え
られ、これら変形態様においても、前述したような効果
のすべて、またはそれら効果のうちのいくつかを達成し
うることは明らかであろう。したがって、本請求の範囲
の記載は、本発明の範囲内に入るような変形態様のすべ
てを包含しようとするものである。
るためのプロセスを示すブロック図である。
ク図である。
である。
である。
めのプロセスを示すブロック図である。
るための変形フローを示す図である。
示すブロック図である。
Claims (10)
- 【請求項1】 プログラムにおけるコンカレントエラー
を検出するためのコンピュータによって実施される方法
であって、プログラムの複数のスレッドの機械語をイン
ストルメンティングして、該スレッドのコンカレント状
態をもたらす命令を捜し出して置き換え、前記複数のス
レッドが実行されている間にメモリにコンカレント状態
情報を記録し、該記録されたコンカレント状態情報を分
析し、一致しない動的コンカレント状態遷移をコンカレ
ントエラーとして報告することを特徴とする方法。 - 【請求項2】 ロックを獲得し解放する命令を捜し出
し、該捜し出された命令を実行フローをインタセプトす
る命令と置き換え、実行されている間に前記複数のスレ
ッドがロックを獲得し解放するオーダーを記録し、前記
複数のロックがロックを獲得するオーダーにおいて一致
しないコンカレント状態遷移をサイクルとして報告し、
実行フローをインタセプトするときにモニタリングプロ
シージャをコールすることを含む請求項1記載の方法。 - 【請求項3】 各スレッドに対して、スレッドに関連し
た現在のロックセットを維持し、ロックが獲得されると
きに前記ロックセットにそのロックを加え、前記ロック
が解放されるときに前記ロックセットからそのロックを
削除し、前記ロックが獲得されるオーダーをロックログ
に記憶させ、新しいロックが獲得されるときに前記ロッ
クセットにロックセットペアを記憶させ、該ペアは、前
記ロックセットの現在のメンバーと、前記ロックセット
のメンバーでない前記新しいロックとの各独自の組み合
わせであり、各ペアに対して、前記ロックセットの現在
のメンバーが第1の位置に記録され、前記新しいロック
が第2の位置に記録されるか、または、前記ロックセッ
トの現在のメンバーが第2の位置に記録され、前記新し
いロックが第1の位置に記憶されるか、するように決定
されたオーダーにて前記ペアを記憶させることを含む請
求項1記載の方法。 - 【請求項4】 前記ロックログのペアは、順序付けされ
たロックグラフとして表されており、さらに、各ロック
のためのノードと、第1のロックを第2のロックに接続
する方向付けエッジとを備えており、該エッジの方向
は、前記第1および第2のロックが獲得されたオーダー
を示しており、第1のノードおよび第2のノードが反対
方向に向けられた第1のエッジおよび第2のエッジによ
って接続されるようなトポロジカルソートを前記ロック
グラフに対して行い、前記第1および第2のノードに関
連したロックをコンカレントロッキングエラーとして報
告することを含む請求項3記載の方法。 - 【請求項5】 ヒープの各アドレスに対して、メモリア
ロケーションおよびメモリデアロケーション命令を捜し
出し置き換えることによってシャドーヒープにおけるシ
ャドーアドレスを維持し、前記ヒープのアドレスのデー
タにアクセスする命令を捜し出し、該アクセス命令をモ
ニタリングプロシージャに対する命令で置き換え、前記
モニタリングプロシージャによって対応するシャドーア
ドレスにロックセット情報を記録し、前記アクセス命令
によるアクセスが前記記録されたロックセット情報と一
致しない場合に、一致しないコンカレント状態をデータ
競合状態として報告することを含む請求項1記載の方
法。 - 【請求項6】 前記ヒープのアロケートされたアドレス
へのアクセスを検出することを含む請求項5記載の方
法。 - 【請求項7】 現在アクセスしているスレッドの現在の
ロックセット情報を前記ヒープのアドレスにアクセスし
ている前のスレッドの記憶されたロックセット情報でイ
ンターセクトし、前記セットのインターセクションが空
である場合に、データ競合状態を報告し、現在のロック
セットと前のロックセットとが異なる場合に、現在のロ
ックセット情報と記憶されたロックセット情報とのイン
ターセクションを記憶し、前記アクセスが前記アドレス
への書き込みである場合に、前記現在のロックセットと
記憶されたロックセットとのインターセクションを書き
込むことを含む請求項6記載の方法。 - 【請求項8】 前記スレッドアクセスが共用されないと
きに、アクセスするスレッドのアイデンティティを記憶
することを含む請求項5記載の方法。 - 【請求項9】 読み取りアクセスに対して読み取りロッ
クセットを維持し、書き込みアクセスに対して書き込み
ロックセットを維持し、読み取りアクセスに対して前記
読み取りロックセットに読み取りロックを加え、書き込
みアクセスに対して前記書き込みロックセットに書き込
みロックを加えることを含む請求項1記載の方法。 - 【請求項10】 前記ロックセットをアレーのエントリ
ーに記録し、特定のエントリーに記憶されたロックセッ
トに関連した各シャドーアドレスでのアレーのその特定
のエントリーに対するポインターを記憶させ、特定のロ
ックセットからハッシュ値を決定し、該ハッシュ値によ
って決定されるようなハッシュテーブルに前記ポインタ
ーを記憶させることを含む請求項5記載の方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/815,979 US6009269A (en) | 1997-03-10 | 1997-03-10 | Detecting concurrency errors in multi-threaded programs |
| US08/815979 | 1997-03-10 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH10254716A true JPH10254716A (ja) | 1998-09-25 |
Family
ID=25219348
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP10058064A Pending JPH10254716A (ja) | 1997-03-10 | 1998-03-10 | マルチスレッデッドプログラムにおけるコンカレントエラーの検出 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US6009269A (ja) |
| EP (1) | EP0864975A3 (ja) |
| JP (1) | JPH10254716A (ja) |
| CA (1) | CA2231597A1 (ja) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR100421316B1 (ko) * | 2000-02-24 | 2004-03-10 | 박희동 | 동기화를 가진 공유메모리 병렬프로그램에서 실행중 2단계최초경합 탐지를 위한 사건선택 방법 |
| US6931514B2 (en) | 2000-11-29 | 2005-08-16 | Nec Corporation | Data dependency detection using history table of entry number hashed from memory address |
| JP2005285122A (ja) * | 2004-03-24 | 2005-10-13 | Microsoft Corp | マルチスレッド化されたプログラムにおける潜在的な競合を検出するための方法およびシステム |
| JP2009032197A (ja) * | 2007-07-30 | 2009-02-12 | Fujitsu Microelectronics Ltd | ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 |
Families Citing this family (84)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6654879B1 (en) * | 1997-01-30 | 2003-11-25 | Northbrook Services | Method and apparatus for analyzing code for out-of-range data involving base and seed tables/lists |
| JP3367385B2 (ja) * | 1997-06-27 | 2003-01-14 | 日本電気株式会社 | 分散トランザクション整合方法及びプログラムを記録した機械読み取り可能な記録媒体 |
| US6212653B1 (en) * | 1998-02-18 | 2001-04-03 | Telefonaktiebolaget Lm Ericsson (Publ) | Logging of events for a state driven machine |
| US6920634B1 (en) * | 1998-08-03 | 2005-07-19 | International Business Machines Corporation | Detecting and causing unsafe latent accesses to a resource in multi-threaded programs |
| US6360220B1 (en) * | 1998-08-04 | 2002-03-19 | Microsoft Corporation | Lock-free methods and systems for accessing and storing information in an indexed computer data structure having modifiable entries |
| US6321276B1 (en) | 1998-08-04 | 2001-11-20 | Microsoft Corporation | Recoverable methods and systems for processing input/output requests including virtual memory addresses |
| US6594701B1 (en) | 1998-08-04 | 2003-07-15 | Microsoft Corporation | Credit-based methods and systems for controlling data flow between a sender and a receiver with reduced copying of data |
| US6314471B1 (en) * | 1998-11-13 | 2001-11-06 | Cray Inc. | Techniques for an interrupt free operating system |
| US6862635B1 (en) | 1998-11-13 | 2005-03-01 | Cray Inc. | Synchronization techniques in a multithreaded environment |
| US6480818B1 (en) | 1998-11-13 | 2002-11-12 | Cray Inc. | Debugging techniques in a multithreaded environment |
| US6952827B1 (en) | 1998-11-13 | 2005-10-04 | Cray Inc. | User program and operating system interface in a multithreaded environment |
| US6826752B1 (en) * | 1998-12-17 | 2004-11-30 | California Institute Of Technology | Programming system and thread synchronization mechanisms for the development of selectively sequential and multithreaded computer programs |
| US6415433B1 (en) | 1998-12-23 | 2002-07-02 | Cray Inc. | Method and system for identifying locations to move portions of the computer program |
| US6430676B1 (en) | 1998-12-23 | 2002-08-06 | Cray Inc. | Method and system for calculating instruction lookahead |
| US6593940B1 (en) * | 1998-12-23 | 2003-07-15 | Intel Corporation | Method for finding errors in multithreaded applications |
| US6230313B1 (en) | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
| US6665688B1 (en) | 1998-12-23 | 2003-12-16 | Cray Inc. | Method and system for automatically regenerating data on-demand |
| US6321379B1 (en) | 1998-12-23 | 2001-11-20 | Cray Inc. | Method and system for target register allocation |
| US6353829B1 (en) | 1998-12-23 | 2002-03-05 | Cray Inc. | Method and system for memory allocation in a multiprocessing environment |
| US6378124B1 (en) | 1999-02-22 | 2002-04-23 | International Business Machines Corporation | Debugger thread synchronization control points |
| US6587967B1 (en) * | 1999-02-22 | 2003-07-01 | International Business Machines Corporation | Debugger thread monitor |
| US6405326B1 (en) * | 1999-06-08 | 2002-06-11 | International Business Machines Corporation Limited | Timing related bug detector method for detecting data races |
| US6714958B1 (en) * | 1999-07-28 | 2004-03-30 | International Business Machines Corporation | Detecting and causing latent deadlocks in multi-threaded programs |
| US6915342B1 (en) * | 2000-02-04 | 2005-07-05 | Ricoh Company Limited | Method and system for maintaining the business office appliance through log files |
| US6658650B1 (en) * | 2000-02-18 | 2003-12-02 | International Business Machines Corporation | Service entry point for use in debugging multi-job computer programs |
| US6601120B1 (en) * | 2000-07-13 | 2003-07-29 | Silicon Graphics, Inc. | System, method and computer program product for implementing scalable multi-reader/single-writer locks |
| US6681345B1 (en) * | 2000-08-15 | 2004-01-20 | International Business Machines Corporation | Field protection against thread loss in a multithreaded computer processor |
| US6817009B2 (en) * | 2000-11-30 | 2004-11-09 | Hewlett-Packard Development Company, L.P. | Method and apparatus for verifying data local to a single thread |
| US7469403B2 (en) * | 2001-04-19 | 2008-12-23 | International Business Machines Corporation | Static detection of a datarace condition for multithreaded object-oriented applications |
| US7137120B2 (en) * | 2001-12-17 | 2006-11-14 | International Business Machines Corporation | Dynamic diagnostic program for determining thread wait time |
| US6807541B2 (en) * | 2002-02-28 | 2004-10-19 | International Business Machines Corporation | Weak record locks in database query read processing |
| WO2003083614A2 (en) * | 2002-03-25 | 2003-10-09 | Eternal Systems, Inc. | Transparent consistent active replication of multithreaded application programs |
| US7516446B2 (en) * | 2002-06-25 | 2009-04-07 | International Business Machines Corporation | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs |
| US7111287B2 (en) * | 2003-01-10 | 2006-09-19 | International Business Machines Corporation | Global processor resource assignment in an assembler |
| US7278057B2 (en) * | 2003-07-31 | 2007-10-02 | International Business Machines Corporation | Automated hang detection in Java thread dumps |
| US20050038806A1 (en) * | 2003-08-12 | 2005-02-17 | Zhiqiang Ma | Methods and apparatus for detecting data race conditions in message-based multi-threaded programs |
| EP1569121B1 (en) * | 2004-02-26 | 2007-07-11 | Research In Motion Limited | Method and system for detecting potential deadlocks in computer programs |
| US7366956B2 (en) * | 2004-06-16 | 2008-04-29 | Hewlett-Packard Development Company, L.P. | Detecting data races in multithreaded computer programs |
| US7757237B2 (en) * | 2004-06-16 | 2010-07-13 | Hewlett-Packard Development Company, L.P. | Synchronization of threads in a multithreaded computer program |
| US20050283770A1 (en) * | 2004-06-18 | 2005-12-22 | Karp Alan H | Detecting memory address bounds violations |
| US7458065B2 (en) * | 2004-09-21 | 2008-11-25 | Intel Corporation | Selection of spawning pairs for a speculative multithreaded processor |
| US7620852B2 (en) * | 2005-03-02 | 2009-11-17 | Microsoft Corporation | Systems and methods of reporting multiple threads involved in a potential data race |
| US8266600B2 (en) * | 2005-03-28 | 2012-09-11 | Nec Laboratories America, Inc. | Model checking of multi threaded software |
| US20070074210A1 (en) * | 2005-09-23 | 2007-03-29 | Microsoft Corporation | Optimal stateless search |
| EP1783604A3 (en) * | 2005-11-07 | 2007-10-03 | Slawomir Adam Janczewski | Object-oriented, parallel language, method of programming and multi-processor computer |
| US7644396B2 (en) * | 2005-11-29 | 2010-01-05 | Microsoft Corporation | Optimal program execution replay and breakpoints |
| US20070143766A1 (en) * | 2005-12-21 | 2007-06-21 | International Business Machines Corporation | Deadlock detection in a computing environment |
| US8572606B1 (en) * | 2005-12-29 | 2013-10-29 | Vmware, Inc. | System and method for avoiding synchronization bugs through virtualization |
| US7836435B2 (en) * | 2006-03-31 | 2010-11-16 | Intel Corporation | Checking for memory access collisions in a multi-processor architecture |
| US8028296B2 (en) * | 2006-03-31 | 2011-09-27 | Microsoft Corporation | Providing a wrapper around native synchronization objects |
| US20070271450A1 (en) * | 2006-05-17 | 2007-11-22 | Doshi Kshitij A | Method and system for enhanced thread synchronization and coordination |
| US8185874B2 (en) * | 2006-11-07 | 2012-05-22 | Microsoft Corporation | Automatic and systematic detection of race conditions and atomicity violations |
| US20080281887A1 (en) * | 2007-05-10 | 2008-11-13 | Nokia Corporation | Application specific garbage collection system |
| US9026993B2 (en) * | 2008-06-27 | 2015-05-05 | Microsoft Technology Licensing, Llc | Immutable types in imperitive language |
| US7941616B2 (en) * | 2008-10-21 | 2011-05-10 | Microsoft Corporation | System to reduce interference in concurrent programs |
| US9569282B2 (en) | 2009-04-24 | 2017-02-14 | Microsoft Technology Licensing, Llc | Concurrent mutation of isolated object graphs |
| CN102053861B (zh) * | 2009-10-30 | 2014-03-12 | 国际商业机器公司 | 并行程序中死锁检测的方法和系统 |
| US8566544B2 (en) * | 2009-12-29 | 2013-10-22 | Microsoft Corporation | Compiler-enforced agent access restriction |
| US8316369B2 (en) | 2009-12-29 | 2012-11-20 | Microsoft Corporation | Dataflow component scheduling using reader/writer semantics |
| US8695003B2 (en) | 2009-12-29 | 2014-04-08 | Microsoft Corporation | Method for managing data accessibility by scheduling three types of executable agents associated with pre-defined access rights within a domain |
| US8549359B2 (en) * | 2010-05-12 | 2013-10-01 | Salesforce.Com, Inc. | Method and system for identifying errors in code |
| US9069894B2 (en) * | 2010-06-18 | 2015-06-30 | Microsoft Technology Licensing, Llc | Data collisions in concurrent programs |
| US8769518B1 (en) | 2010-06-29 | 2014-07-01 | Ca, Inc. | Ensuring determinism during programmatic replay in a virtual machine |
| US8732670B1 (en) | 2010-06-29 | 2014-05-20 | Ca, Inc. | Ensuring determinism during programmatic replay in a virtual machine |
| US9395987B2 (en) * | 2010-09-23 | 2016-07-19 | Freescale Semiconductor, Inc. | Method and device for detecting a race condition |
| US8533682B2 (en) | 2010-11-05 | 2013-09-10 | Microsoft Corporation | Amplification of dynamic checks through concurrency fuzzing |
| US20120151271A1 (en) * | 2010-12-10 | 2012-06-14 | Nec Laboratories America, Inc. | Mat-reduced symbolic analysis |
| EP2795466A4 (en) * | 2011-12-21 | 2015-09-23 | Intel Corp | METHODS AND SYSTEMS FOR IDENTIFYING AND REPRODUCING SIMULTANEOUS ACCESS VIOLATIONS IN MULTIFUNCTION PROGRAMS |
| US9135139B2 (en) | 2012-06-27 | 2015-09-15 | Intel Corporation | Methods and systems to identify and reproduce concurrency violations in multi-threaded programs using expressions |
| US9098269B2 (en) * | 2013-01-04 | 2015-08-04 | Microsoft Technology Licensing, Llc | System and method to ensure resource access safety with immutable object types |
| US10078575B2 (en) * | 2013-03-13 | 2018-09-18 | Microsoft Technology Licensing, Llc | Diagnostics of state transitions |
| US9117021B2 (en) * | 2013-03-14 | 2015-08-25 | Intel Corporation | Methods and apparatus to manage concurrent predicate expressions |
| US9842009B2 (en) * | 2013-05-13 | 2017-12-12 | Nxp Usa, Inc. | Method and device for detecting a race condition and a computer program product |
| DE102015011315A1 (de) * | 2015-08-28 | 2017-03-02 | Giesecke & Devrient Gmbh | Codeverschleierung |
| US10614039B2 (en) * | 2017-04-04 | 2020-04-07 | International Business Machines Corporation | Testing of lock managers in computing environments |
| US10733083B2 (en) * | 2017-10-18 | 2020-08-04 | Salesforce.Com, Inc. | Concurrency testing |
| US10599552B2 (en) * | 2018-04-25 | 2020-03-24 | Futurewei Technologies, Inc. | Model checker for finding distributed concurrency bugs |
| CN111414337B (zh) * | 2019-01-08 | 2023-05-26 | 阿里巴巴集团控股有限公司 | 一种文件读取方法、装置、计算设备及存储介质 |
| CN111090528B (zh) * | 2019-12-25 | 2023-09-26 | 北京天融信网络安全技术有限公司 | 死锁确定方法、装置及电子设备 |
| EP3964959A1 (en) * | 2020-09-03 | 2022-03-09 | ARM Limited | Data processing |
| CN112181808B (zh) * | 2020-09-08 | 2022-06-28 | 北京邮电大学 | 一种程序并发缺陷检测方法、装置、设备以及存储介质 |
| CN116758657B (zh) * | 2023-05-06 | 2026-01-27 | 珠海格力电器股份有限公司 | 一种智能门锁的管理方法、装置、设备及存储介质 |
| CN117971137B (zh) * | 2024-04-02 | 2024-06-04 | 山东海润数聚科技有限公司 | 一种基于多线程的大规模向量数据一致性的评估方法和系统 |
| CN121187933B (zh) * | 2025-09-10 | 2026-04-17 | 成都蜀天众赢科技有限公司 | 一种软件缺陷的实时监控与根因定位方法及系统 |
Family Cites Families (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH05134886A (ja) * | 1990-11-30 | 1993-06-01 | Fujitsu Ltd | デツドロツク検出方式 |
| US5193180A (en) * | 1991-06-21 | 1993-03-09 | Pure Software Inc. | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
| US5469575A (en) * | 1992-10-16 | 1995-11-21 | International Business Machines Corporation | Determining a winner of a race in a data processing system |
| EP0595453B1 (en) * | 1992-10-24 | 1998-11-11 | International Computers Limited | Distributed data processing system |
| DE69422743T2 (de) * | 1993-03-30 | 2000-06-08 | Fujitsu Ltd., Kawasaki | Endlosschleife-Erkennungsgerät |
| FR2708766B1 (fr) * | 1993-08-03 | 1995-09-08 | Bull Sa | Procédé d'analyse d'interblocages dans un système d'exploitation. |
| US5539907A (en) * | 1994-03-01 | 1996-07-23 | Digital Equipment Corporation | System for monitoring computer system performance |
| JP3392236B2 (ja) * | 1994-11-04 | 2003-03-31 | 富士通株式会社 | 分散トランザクション処理システム |
| US5764976A (en) * | 1995-02-06 | 1998-06-09 | International Business Machines Corporation | Method and system of deadlock detection in a data processing system having transactions with multiple processes capable of resource locking |
| US5682537A (en) * | 1995-08-31 | 1997-10-28 | Unisys Corporation | Object lock management system with improved local lock management and global deadlock detection in a parallel data processing system |
| US5862376A (en) * | 1996-06-24 | 1999-01-19 | Sun Microsystems, Inc. | System and method for space and time efficient object locking |
-
1997
- 1997-03-10 US US08/815,979 patent/US6009269A/en not_active Expired - Lifetime
-
1998
- 1998-03-09 EP EP98104160A patent/EP0864975A3/en not_active Withdrawn
- 1998-03-09 CA CA002231597A patent/CA2231597A1/en not_active Abandoned
- 1998-03-10 JP JP10058064A patent/JPH10254716A/ja active Pending
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR100421316B1 (ko) * | 2000-02-24 | 2004-03-10 | 박희동 | 동기화를 가진 공유메모리 병렬프로그램에서 실행중 2단계최초경합 탐지를 위한 사건선택 방법 |
| US6931514B2 (en) | 2000-11-29 | 2005-08-16 | Nec Corporation | Data dependency detection using history table of entry number hashed from memory address |
| US7418583B2 (en) | 2000-11-29 | 2008-08-26 | Nec Corporation | Data dependency detection using history table of entry number hashed from memory address |
| JP2005285122A (ja) * | 2004-03-24 | 2005-10-13 | Microsoft Corp | マルチスレッド化されたプログラムにおける潜在的な競合を検出するための方法およびシステム |
| KR101143214B1 (ko) | 2004-03-24 | 2012-05-18 | 마이크로소프트 코포레이션 | 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 |
| JP2009032197A (ja) * | 2007-07-30 | 2009-02-12 | Fujitsu Microelectronics Ltd | ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| EP0864975A2 (en) | 1998-09-16 |
| US6009269A (en) | 1999-12-28 |
| CA2231597A1 (en) | 1998-09-10 |
| EP0864975A3 (en) | 2007-10-03 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6009269A (en) | Detecting concurrency errors in multi-threaded programs | |
| Pozniansky et al. | MultiRace: efficient on‐the‐fly data race detection in multithreaded C++ programs | |
| Pozniansky et al. | Efficient on-the-fly data race detection in multithreaded C++ programs | |
| KR101143214B1 (ko) | 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템 | |
| Adve et al. | Detecting data races on weak memory systems | |
| Perkovic et al. | Online data-race detection via coherency guarantees | |
| Chakrabarti et al. | Atlas: Leveraging locks for non-volatile memory consistency | |
| US6854108B1 (en) | Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors | |
| US6817009B2 (en) | Method and apparatus for verifying data local to a single thread | |
| US7752605B2 (en) | Precise data-race detection using locksets | |
| US20020120428A1 (en) | Topological, on-the-fly classification of objects into a global set and local sets | |
| US10241894B2 (en) | Data-scoped dynamic data race detection | |
| US20090199162A1 (en) | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs | |
| JP2009523271A (ja) | ソフトウェアトランザクショナルメモリ動作の最適化 | |
| Sack et al. | Accurate and efficient filtering for the intel thread checker race detector | |
| US20110029819A1 (en) | System and method for providing program tracking information | |
| US7844977B2 (en) | Identifying unnecessary synchronization objects in software applications | |
| Ceze et al. | Colorama: Architectural support for data-centric synchronization | |
| Christiaens et al. | TRaDe: Data race detection for Java | |
| Pyla et al. | Avoiding deadlock avoidance | |
| Luchangco et al. | On the uncontended complexity of consensus | |
| Jenke et al. | Mapping high-level concurrency from OpenMP and MPI to ThreadSanitizer Fibers | |
| Ronsse et al. | Non-intrusive on-the-fly data race detection using execution replay | |
| Edelson | Fault interpretation: fine-grain monitoring of page accesses | |
| Yu et al. | Facilitating Bug Detection for OpenMP Offloading Applications |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041119 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20061117 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20061127 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070227 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070302 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070528 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20071009 |