JP2001256065A - 排他制御方法及び計算機システム - Google Patents

排他制御方法及び計算機システム

Info

Publication number
JP2001256065A
JP2001256065A JP2000070840A JP2000070840A JP2001256065A JP 2001256065 A JP2001256065 A JP 2001256065A JP 2000070840 A JP2000070840 A JP 2000070840A JP 2000070840 A JP2000070840 A JP 2000070840A JP 2001256065 A JP2001256065 A JP 2001256065A
Authority
JP
Japan
Prior art keywords
lock
thread
release
request
monitor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2000070840A
Other languages
English (en)
Inventor
Masaaki Hosouchi
昌明 細内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2000070840A priority Critical patent/JP2001256065A/ja
Publication of JP2001256065A publication Critical patent/JP2001256065A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 動作頻度の高い少数のスレッドと動作頻度の
低いスレッドとを混在して処理する計算機システムにお
ける共有資源の排他制御処理に要するCPUオーバヘッ
ドを削減する。 【解決手段】 ロック解放を要求されたとき、解放を行
わず遅延フラグをセットする。但し、解放待ちスレッド
が存在する場合や動作頻度の高いスレッドが複数存在す
る場合、ロックの解放を行う。再度同一スレッドからロ
ックの取得が要求されたとき、遅延フラグとスレッド識
別子とによりロックが取得済であることを識別しロック
の取得処理を行わない。他のスレッドから解放を遅延さ
れたロックの取得が要求されたときは、割り込み処理に
よりロックを解放してから再度ロックを取得する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、計算機システムに
おける排他制御方法及び計算機システムに係り、特に、
スレッドやタスク等のプログラムの実行制御単位間の共
有資源に対するCPUのオーバヘッドを低減した排他制
御方法及びこの方法を使用した計算機システムに関す
る。
【0002】
【従来の技術】一般に、計算機システムの制御プログラ
ムであるオペレーティングシステムにより使用され、あ
るいは制御されるプログラムカウンタ、レジスタ等のコ
ンテキスト、スタックを個別に持つプログラムの実行制
御単位はスレッドと呼ばれている。オペレーティングシ
ステムによっては、スレッドをタスクやライトウェイト
プロセスと呼ぶ場合もある。また、アドレス空間やプロ
グラムコードから構成されるプログラムの実行制御単位
はプロセスと呼ばれている。オペレーティングシステム
によっては、プロセスをタスクやジョブと呼ぶ場合もあ
る。1つのプロセスには、通常、1つまたは複数のスレ
ッドが存在する。
【0003】計算機システムは、処理の実行途中に一定
時間毎に切り替えたり、複数のCPU上で同時に実行し
たりして、複数のプロセスやスレッドを並列に扱う場合
がある。通常、計算機システムは、このような場合に、
各プロセス間や各スレッド間で共有する資源の一貫性を
保証し、危険区域区間を2つ以上のプロセスやスレッド
が実行しないようにするために、排他制御処理を有して
いる。この種の排他制御に関する従来技術として、例え
ば、A.C.Shaw著「オペレーティングシステムの論理設
計」(ISBN4-8222-7077-7)、p51-p58等に記載された技術
が知られている。この従来技術は、セマフォを使用して
他のプロセスがV操作を実行するまでP操作を行ったプ
ロセス待たせるというものである。セマフォを用いた排
他制御処理は、pthread_mutex_lock()等の関数がオペレ
ーティングシステムに実装されて実行される。
【0004】また、前述と異なる方法による排他制御に
関する従来技術として、前記文献のp61-p66 に記載され
た技術が知られている。この従来技術は、セマフォを用
いて手続き本体を同時に1つのプロセスのみに実行を許
可するモニタ機能の実現する方式に関するものである。
そして、この従来技術は、ロックを取得するモニタ入口
処理と、ロックを解放するモニタ出口処理との双方にお
いて、モニタ内の手続きの相互アクセスを防止するた
め、それぞれ、mutex_lock()及びmutex_unlock()を1回
づつ呼び出し、さらに、資源を排他制御するためにも m
utex_lock()を用いるというものである。
【0005】さらに、前述のモニタ機能に関する従来技
術として、OleAgesen他著「An Efficient Meta-lock fo
r Implementing Ubiquitous Synchronization」,(Sun L
absTR-99-76)p11-p12に記載されている技術が知られて
いる。この従来技術は、mutex_lock()の代わりにCompar
e-and-SwapやSwap等の排他制御命令を用いたmetaLock()
を用いるというものである。そして、資源の排他制御
は、資源の競合が発生しない限り、ロックレコードを割
り当てることにより行われる。
【0006】
【発明が解決しようとする課題】前述した「オペレーテ
ィングシステムの論理設計」に記載された従来技術によ
るモニタ処理は、mutex 処理が必ず呼び出されるため、
CPUオーバヘッドが大きくなるという問題点を有して
いる。この理由は、mutex 処理がスレッドのスリープや
ウェイクアップ制御を行うため、Compare-and-Swapやセ
マフォ使用するものに比較するとmutex 処理が複雑とな
るためである。
【0007】また、前述した「An Efficient Meta-lock
for Implementing Ubiquitous Synchronization」記載
の別の従来技術によるモニタ処理は、mutex を用いる場
合よりCPUオーバヘッドの少ないCompare-and-Swapを
用いているが、命令実行中に他のCPUで同時に命令が
実行されないようにシリアライゼーションを伴うCompar
e-and-Swap命令とSwap命令とが各1回づつ必ず発生する
ことになり処理負荷が大きいという問題点を有してい
る。
【0008】そして、計算機システムがマルチスレッド
やマルチプロセスの処理を行うものであれば、共有資源
の排他制御は必須であり、たとえ、ある特定のスレッド
が実行時間のほとんどを占め、他のスレッドが特定の事
象が発生したり一定時間経過したときのみしか動作しな
いようなプログラムであっても、実行時間のほとんどを
占めるスレッドは、いつ他のスレッドが動作するかわか
らないため、モニタを呼び出しロックをかけてから共有
資源をアクセスしなければならない。このように、共有
資源の競合がほとんど発生しない場合においても、各ス
レッドは、共有資源をアクセスする度にロックの取得や
解放の処理を行うが必要になる。このため、マルチスレ
ッドやマルチプロセスの処理を行う計算機システムが
は、共有資源の数が多かったり、共有資源をアクセスす
る回数が多い場合、これらの排他制御に要するCPUオ
ーバヘッドが無視できない大きさとなり、処理性能が低
下するという問題点を生じることになる。
【0009】本発明の目的は、前述した従来技術の問題
点を解決し、ある特定のスレッドが実行時間のほとんど
を占め、スレッド切り替え発生頻度が低く共有資源の競
合がほとんど発生しない場合において特に有効な排他制
御方法及びこの方法を使用した計算機システムを提供す
ることにある。
【0010】
【課題を解決するための手段】本発明によれば前記目的
は、複数のスレッドが並行して動作することが可能な計
算機システムにおける共有資源のスレッド間での排他制
御方法において、第1のスレッドから排他すべき共有資
源のロックの取得が要求されたときに前記ロックを取得
し、前記第1のスレッドのスレッド識別子を排他する共
有資源単位に設けられたモニタ管理構造体に記憶し、前
記ロックの解放が要求されたときにロックの解放を遅延
させ、前記モニタ管理構造体に解放遅延フラグをセット
し、再び前記ロックの取得がスレッドから要求されたと
きに前記モニタ管理構造体に記憶されたスレッド識別子
とロックの取得要求を行ったスレッドのスレッド識別子
とを比較し、ロックの取得の要求が前記第1のスレッド
からのものであるか否かを判定し、前記解放遅延フラグ
を調べてロック解放が遅延されている否かを識別し、前
記再度のロックの取得の要求が前記第1のスレッドから
のロックの取得要求であり、かつ、ロック解放が遅延さ
れている場合、前記第1のスレッドに前記ロックを継続
して使用させることにより達成される。
【0011】また、前記目的は、前述の排他制御方法を
計算機システムに適用することにより達成される。
【0012】
【発明の実施の形態】以下、本発明による排他制御方法
及びこの方法を使用した計算機システムの実施形態を図
面により詳細に説明する。
【0013】図1は本発明の一実施形態による計算機シ
ステムのハードウェア構成の一例を示すブロック図、図
2は本発明の一実施形態による排他制御方法を実施する
処理構成を説明するブロック図、図3はモニタ管理構造
体の構成を説明する図、図4はモニタ入口処理の処理動
作を説明するフローチャート、図5はモニタ出口処理の
処理動作を説明するフローチャート、図6はロック解放
要求割り込み処理の処理動作を説明するフローチャート
である。図1〜図3において、101は中央処理装置
(CPU)、102は主記憶装置、103はスレッド、
104はユーザプログラム、105はモニタ処理、10
6は排他制御処理、107はモニタ管理構造体、108
はロックコード、110はロック取得処理、111はロ
ック解放処理、300はモニタ入口処理、400はモニ
タ出口処理、500はロック解放要求割り込み処理であ
る。
【0014】本発明の一実施形態による計算機システム
は、図1に示すように、1つまたは複数のCPU101
と、主記憶装置102とを備えて構成されている。主記
憶装置102上には、スレッドの実体としてのスタック
やコンテキスト等の複数のスレッド103、スレッド1
03相互間で共有する命令コードやデータを有するユー
ザプログラム104、ユーザプログラム104内の複数
のスレッド相互間で共有可能なメモリ上の領域やファイ
ル等のオブジェクトとしての共有資源109の排他制御
を行うときに呼び出されるライブラリ関数である命令コ
ードを有するモニタ処理105、モニタ処理105から
呼び出されるmutex_lock等のオペレーティングシステム
の排他制御処理の命令コードを有する排他制御処理10
6、複数の共有資源109等が配置されている。そし
て、複数の共有資源109のそれぞれに対して1つづつ
モニタ管理構造体107とセマフォ等のロックレコード
108とが割り当てられている。
【0015】本発明の一実施形態による排他制御方法を
実施する処理は、図2に示すように、モニタ処理105
に設けられるモニタ入口処理300、モニタロック処理
400、ロック解放要求割り込み処理500と、排他制
御処理106に設けられるロック取得処理110、ロッ
ク解放処理とにより構成される。
【0016】ユーザプログラム104は、共有資源10
9の使用のために共有資源109をロックする場合、共
有資源109に対応した構造体107を指定してモニタ
処理105内のモニタ入口処理300を呼び出す。モニ
タ入口処理300は、共有資源109のロック状態を調
べ、共有資源109がどのスレッドからもロックされて
いないことを確認して、モニタ管理構造体107からポ
イントされるかモニタ管理構造体107内に含まれるロ
ックレコード108を指定して、オペレーティングシス
テム内のmutex_lock()やセマフォP操作、ENQ等のロ
ック取得処理110を呼び出す。ロック取得処理110
は、これにより、ロックレコード108の内容をロック
状態に更新する。
【0017】また、ユーザプログラム104は、共有資
源109のロックを解放する場合、共有資源109に対
応した構造体107を指定してモニタ処理105内のモ
ニタ出口処理400を呼び出す。モニタ出口処理400
は、構造体107を参照して他のスレッドが共有資源1
09のロックの解放待ちをしているか否かを調べる。そ
して、モニタ出口処理400は、解放待ちをしていた
り、動作頻度が低いとあらかじめ定義しておいたスレッ
ド以外のスレッド数があらかじめ定めておいた数、例え
ば2以上の場合、ロックレコード108を指定してオペ
レーティングシステム内のmutex_unlock()やセマフォV
操作、DEQ等のロック解放処理111を呼び出してロ
ックを解放する。このとき、モニタ出口処理400は、
解放待ちとなっているスレッドが存在していなければ、
ロックの解放を行わず、他のスレッドがロックを要求す
るまで継続してその共有資源109のロックを保持す
る。
【0018】前述したモニタ入口処理300の処理にお
いて、モニタ入口処理300は、すでに共有資源がスレ
ッドによりロックされている場合、ロックしたスレッド
がこの処理300を呼び出したユーザプログラム104
の自己スレッドであるか否かを調べ、自己スレッドであ
る場合、そのロックを継続して利用させる。また、モニ
タ入口処理300は、ロックを行っているスレッドがこ
の処理300を呼び出したユーザプログラム104以外
の他のユーザプログラムのスレッドであった場合、共有
資源109が使用中であるか、モニタ出口処理400で
ロックを解放しないまま何もしていない状態であるかを
モニタ管理構造体107を参照して調べる。モニタ入口
処理300は、共有資源109が使用されいいればロッ
ク取得処理110を呼び出してロックの解放を待つが、
使用されていなければ、ロックを保持しているスレッド
に割り込みをかけてロック解放要求処理500を実行さ
せる。ロック解放要求処理500は、ロック解放処理1
11を呼び出してそのロックを解放する。
【0019】本発明の実施形態による排他制御方法は、
前述したように、モニタ出口処理400においてロック
を解放せず、モニタ入口処理300において他のスレッ
ドがその資源を使用するときまでロックの解放を遅延す
る点、モニタ出口処理400においてロックを解放する
かしないかを待ち状態にあるスレッド数により判断する
点に特徴がある。
【0020】モニタ管理構造体107は、図3に示すよ
うに、ロックを取得したスレッドを識別する取得元スレ
ッド識別子、解放遅延フラグ、解放待ちスレッド数、ロ
ックレコード108の識別子またはアドレス等の情報を
含んで構成されている。このモニタ管理構造体107
は、ロックレコード108の識別子を含む代わりに、ロ
ックレコード108そのものを含んで構成されていても
よい。
【0021】また、CPU101内で動作している図示
しないオペレーティングシステム(OS)は、スレッド
を生成するときにスレッド数をカウントする。このと
き、OSは、動作頻度が低いと予め規定しておいたりユ
ーザプログラムで指定されたスレッドについてスレッド
数をカウントしない。これにより、動作頻度の高いスレ
ッド数のみカウントされることになる。ここで、動作頻
度が低いと予め規定しておくスレッドとは、ガベージコ
レクション等の一定時間を置いたりイベントが発生した
ときに動作し、普段は待ち状態となるスレッドである。
【0022】次に、図4に示すフローを参照してモニタ
入口処理300の処理動作について説明する。
【0023】(1)モニタ入口処理300は、ユーザプ
ログラム104から呼び出されると、指定されたモニタ
管理構造体107に記録されているスレッド識別子と、
動作中のスレッドの識別子とを比較し、取得元のスレッ
ドがモニタの所有者、すなわち、モニタ入口処理300
を呼び出したユーザプログラム104の自己スレッドで
あるか否かを調べる(ステップ301)。
【0024】(2)ステップ301で、取得元のスレッ
ドが自己スレッドであると判定された場合、構造体10
7の中の解放遅延フラグを参照し、ロックが解放されな
いままであるか否かを解放遅延フラグにより調べ、解放
遅延フラグがONであれば、取得元のスレッドが継続し
てそのロックを利用して共有資源109を利用可能であ
るので、ロックが利用されていることを他のスレッドに
判別させるために解放遅延フラグをリセットしてモニタ
入口処理を終了する。この場合、解放遅延されたロック
を継続して使用することができるため、排他制御処理1
06が呼び出されることはない(ステップ302、30
3)。
【0025】(3)ステップ301でスレッド識別子が
一致していなかった、すなわち、取得元スレッドが自己
スレッドでなかった場合、あるいは、ステップ302で
解放遅延フラグがONでなかった場合、モニタ入口処理
300は、モニタ管理構造体107に指定されているロ
ックレコードを指定してロック取得処理109を呼び出
してロックを取得する。このときのロック取得処理は、
ロックが取得されないときに待ち状態になるpthread_lo
ck()のような関数ではなく、ロックが取得されないとき
にエラーリターンする pthread_trylock()のような関数
を呼び出すことにより実行される(ステップ304)。
【0026】(4)ロックが取得できなかったか否かを
エラーコードにより調べ、エラー状態でなくロックが取
得できていれば、自己スレッドの識別子をモニタ管理構
造体107に記録しモニタ入口処理を終了する。このケ
ースは、初めてロックを取得したり、スレッド数が多い
ためモニタ出口処理でロックが解放された状態のときに
実行される(ステップ305、306)。
【0027】(5)ステップ305でロック取得が失敗
したと判断された場合、モニタ管理構造体107に記録
されているスレッド識別子と動作中のスレッドの識別子
とを比較し、モニタの所有者が自己スレッドであるか調
べ、取得元のスレッドが自己スレッドである場合、取得
元のスレッドが継続してそのロックを利用して共有資源
109を利用可能であるので、このままモニタ入口処理
を終了する(ステップ307)。
【0028】(6)ステップ307で取得元のスレッド
が自己スレッドでないと判定された場合、解放待ちスレ
ッド数をカウントアップし、解放遅延フラグがONであ
るか否かを調べ、解放遅延フラグがONであれば、他の
スレッドがロックを解放遅延したままであるため、解放
を遅延したスレッドに対して割り込みをかけてロック解
放要求割り込み処理500を起動してロックを解放させ
る(ステップ308〜310)。
【0029】(7)ステップ309で解放遅延フラグが
ONでなかった場合、あるいは、ステップ310の処理
で他のスレッドにロックを解放させた後、pthread_lock
()等の関数を呼び出してロック取得処理109を実行さ
せ、他のスレッドがロックを解放するまで待ち状態にな
る(ステップ311)。
【0030】(8)待ち状態が解除されたときはロック
が取得されているので、解放待ちスレッド数を減算した
のち、自己スレッドの識別子をモニタ管理構造体107
に記録してモニタ入口処理を終了する(ステップ31
2、313)。
【0031】前述したステップ302及びステップ30
3、ステップ309における解放遅延フラグの比較及び
代入処理は、比較と代入とを同時に行うことによって、
命令実行中に他のCPUが実行されないように制御を行
うCompare&Swap命令等の命令を用いて同時に行うべきで
ある。その理由は、ステップ302とステップ303と
の間に別のスレッドでステップ309が実行されてしま
うと、ステップ302を実行したスレッドが、ロックが
継続利用できるものとして処理を行うが、その後ステッ
プ310が実行されてしまい、ロックが解放されてしま
うからである。
【0032】次に、図5に示すフローを参照してモニタ
出口処理400の処理動作について説明する。
【0033】(1)モニタ出口処理400は、まず、ロ
ックの解放を要求したスレッドのロックの解放遅延フラ
グをセットし、ロックの解放待ちをしているスレッドが
あるか否かを解放待ちスレッド数が“0”より大きいか
否かにより調べる(ステップ401、402)。
【0034】(2)ステップ402でロックの解放待ち
をしているスレッドがない場合、動作頻度の高いスレッ
ド数のカウンタを参照し、そのユーザスレッド数が予め
定めておいた数、例えば1を超えているか否かを調べ、
超えていなければこのままモニタ出口処理を終了する
(ステップ403)。
【0035】(3)ステップ402でロックの解放待ち
をしているスレッドがあった場合、あるいは、ステップ
403で動作頻度の高いユーザスレッド数が予め定めて
おいた数より多い場合、ロック解放割り込み処理500
の起動回数を削減するためにステップ401でセットし
た解放遅延フラグをリセットする(ステップ404)。
【0036】(4)その後、モニタ出口処理400は、
モニタ管理構造体107の取得元スレッドのスレッド識
別子をリセットしてロックを解放する(ステップ40
5、406)。
【0037】前述の処理により、ロックの解放待ちをし
ているスレッドがない場合、あるいは、動作頻度の高い
ユーザスレッド数が予め定めておいた数に達していない
場合、ロックが解放されることがなく、解放遅延フラグ
が設定されたままの状態となる。
【0038】また、前述の処理フローにおいて、解放遅
延フラグを先にセットしてからリセットする理由は、誤
ってロックが保持されたままになるのを防ぐためであ
る。すなわち、あるスレッドがモニタ入口処理300の
ステップ308を実行する前に、別のスレッドがモニタ
出口処理400のステップ402を実行し、モニタ出口
処理400で解放遅延フラグが設定される前にモニタ入
口処理300でステップ309が実行されてしまうと、
ロック解放要求割り込み処理500が起動されないまま
ロックが保持された状態になり、モニタ入口処理300
を呼び出したスレッドは永遠に待ち状態になる。このよ
うなことは、解放遅延フラグの設定をステップ402の
前に実行しておくことにより防止することができる。
【0039】次に、図6に示すフローを参照してロック
解放要求割り込み処理500の処理動作について説明す
る。
【0040】(1)ロック解放要求割り込み処理500
は、起動されると、まず、ロック解放遅延フラグを参照
してロック解放遅延フラグがONであるか否かをチェッ
クし、ONでない場合そのまま処理を終了する(ステッ
プ501)。
【0041】(2)ステップ501でロック解放遅延フ
ラグがONであった場合、解放遅延フラグをリセット
し、ロック解放処理110を呼び出してロックを解放す
る(ステップ502、503)。
【0042】前述したように、解放遅延フラグがONで
あるときのみ解放遅延フラグをリセットしてロック解放
処理110を呼び出すことにより、ロック解放処理11
0が何度も呼び出されることを防止することができる。
【0043】なお、前述した処理において、ステップ5
01とステップ502とは、処理300のステップ30
2及びステップ303の場合と同様に、Compare&Swap等
の命令を用いて1命令で実行される。但し、ロック解放
処理110が何度呼び出されても支障をきたさない場合
は、ステップ501とステップ502とはなくてもよ
い。
【0044】前述した本発明の実施形態による排他制御
方法によれば、ロックを取得したスレッド以外のスレッ
ドが資源をアクセスするまで、ロックを取得したスレッ
ドがロックを継続して保持するため、同一スレッド内で
モニタ入口処理とロック出口処理とを繰り返し行って
も、ロック取得処理やロック解放処理を呼び出さずにす
むため、ロック取得やロック解放の回数を減少させるこ
とができ、ロック処理に要するCPUのオーバヘッドを
削減することができる。本発明の実施形態は、特に、動
作頻度の高いスレッドが1つしか存在せずスレッドスイ
ッチの発生頻度が低い場合に有効である。
【0045】また、前述した本発明の実施形態は、予想
される動作頻度によりスレッドを分類し、動作頻度の高
いスレッド数をカウントし動作頻度の高いスレッド数が
多い場合、ロック解放要求時にそのロックを解放するた
め、ロック解放要求割り込みが多発することを防止する
ことができる。
【0046】さらに、本発明の実施形態による排他制御
方法を計算機システムに適用することにより、高性能な
計算機システムを構成することができる。
【0047】
【発明の効果】以上説明したように本発明によれば、あ
る特定のスレッドが実行時間のほとんどを占め、スレッ
ド切り替え発生頻度が低く共有資源の競合がほとんど発
生しない場合において特に有効で、ロック処理に要する
CPUのオーバヘッドを削減することができる高性能な
排他制御方法及びこの方法を使用した計算機システムを
提供することができる。
【図面の簡単な説明】
【図1】本発明の一実施形態による計算機システムのハ
ードウェア構成の一例を示すブロック図である。
【図2】本発明の一実施形態による排他制御方法を実施
する処理構成を説明するブロック図である。
【図3】モニタ管理構造体の構成を説明する図である。
【図4】モニタ入口処理の処理動作を説明するフローチ
ャートである。
【図5】モニタ出口処理の処理動作を説明するフローチ
ャートである。
【図6】ロック解放要求割り込み処理の処理動作を説明
するフローチャートである。
【符号の説明】
101 中央処理装置(CPU) 102 主記憶装置 103 スレッド 104 ユーザプログラム 105 モニタ処理 106 排他制御処理 107 モニタ管理構造体 108 ロックコード 110 ロック取得処理 111 ロック開放処理 300 モニタ入口処理 400 モニタ出口処理 500 ロック開放要求割り込み処理

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 複数のスレッドが並行して動作すること
    が可能な計算機システムにおける共有資源のスレッド間
    での排他制御方法において、第1のスレッドから排他す
    べき共有資源のロックの取得が要求されたときに前記ロ
    ックを取得し、前記第1のスレッドのスレッド識別子を
    排他する共有資源単位に設けられたモニタ管理構造体に
    記憶し、前記ロックの解放が要求されたときにロックの
    解放を遅延させ、前記モニタ管理構造体に解放遅延フラ
    グをセットし、再び前記ロックの取得がスレッドから要
    求されたときに前記モニタ管理構造体に記憶されたスレ
    ッド識別子とロックの取得要求を行ったスレッドのスレ
    ッド識別子とを比較し、ロックの取得の要求が前記第1
    のスレッドからのものであるか否かを判定し、前記解放
    遅延フラグを調べてロック解放が遅延されている否かを
    識別し、前記再度のロックの取得の要求が前記第1のス
    レッドからのロックの取得要求であり、かつ、ロック解
    放が遅延されている場合、前記第1のスレッドに前記ロ
    ックを継続して使用させることを特徴とする排他制御方
    法。
  2. 【請求項2】 前記再度のロックの取得の要求が前記第
    1のスレッドからのロックの取得要求でなく、他の第2
    のスレッドからの要求であり、かつ、ロック解放が遅延
    されている場合、ロックを取得した前記第1のスレッド
    に割り込みを起こしてロックを解放させることを特徴と
    する請求項1記載の排他制御方法。
  3. 【請求項3】 前記解放遅延フラグのセットは、スレッ
    ドを動作頻度の高いスレッドと動作頻度の低いスレッド
    とに区別して、動作頻度の高いスレッド数をカウントし
    て保持しておき、動作頻度の高いスレッド数があらかじ
    め定められた数以下の場合に行われることを特徴とする
    請求項1記載の排他制御方法。
  4. 【請求項4】 複数のスレッドが並行して動作すること
    が可能な計算機システムにおいて、第1のスレッドから
    排他すべき共有資源のロックの取得が要求されたときに
    前記ロックを取得する手段と、前記第1のスレッドのス
    レッド識別子を排他する共有資源単位に設けられたモニ
    タ管理構造体に記憶する手段と、前記ロックの解放が要
    求されたときにロックの解放を遅延させ、前記モニタ管
    理構造体に解放遅延フラグをセットする手段と、再び前
    記ロックの取得がスレッドから要求されたときに前記モ
    ニタ管理構造体に記憶されたスレッド識別子とロックの
    取得要求を行ったスレッドのスレッド識別子とを比較す
    る手段と、ロックの取得の要求が前記第1のスレッドか
    らのものであるか否かを判定する手段と、前記解放遅延
    フラグを調べてロック解放が遅延されている否かを識別
    する手段と、前記再度のロックの取得の要求が前記第1
    のスレッドからのロックの取得要求であり、かつ、ロッ
    ク解放が遅延されている場合、前記第1のスレッドに前
    記ロックを継続して使用させる手段とを備えることを特
    徴とする計算機システム。
  5. 【請求項5】 前記再度のロックの取得の要求が前記第
    1のスレッドからのロックの取得要求でなく、他の第2
    のスレッドからの要求であり、かつ、ロック解放が遅延
    されている場合、ロックを取得した前記第1のスレッド
    に割り込みを起こしてロックを解放させる手段をさらに
    備えることを特徴とする請求項4記載の計算機システ
    ム。
JP2000070840A 2000-03-14 2000-03-14 排他制御方法及び計算機システム Pending JP2001256065A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2000070840A JP2001256065A (ja) 2000-03-14 2000-03-14 排他制御方法及び計算機システム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000070840A JP2001256065A (ja) 2000-03-14 2000-03-14 排他制御方法及び計算機システム

Publications (1)

Publication Number Publication Date
JP2001256065A true JP2001256065A (ja) 2001-09-21

Family

ID=18589510

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000070840A Pending JP2001256065A (ja) 2000-03-14 2000-03-14 排他制御方法及び計算機システム

Country Status (1)

Country Link
JP (1) JP2001256065A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100902977B1 (ko) 2006-05-06 2009-06-15 엔비디아 코포레이션 하드웨어 공유 시스템 및 방법
JP2010524054A (ja) * 2007-03-30 2010-07-15 インターナショナル・ビジネス・マシーンズ・コーポレーション エミュレートされた処理環境でメモリ・アクセスを管理する方法、システム、およびそのためのコンピュータ・プログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100902977B1 (ko) 2006-05-06 2009-06-15 엔비디아 코포레이션 하드웨어 공유 시스템 및 방법
JP2010524054A (ja) * 2007-03-30 2010-07-15 インターナショナル・ビジネス・マシーンズ・コーポレーション エミュレートされた処理環境でメモリ・アクセスを管理する方法、システム、およびそのためのコンピュータ・プログラム
JP4738548B2 (ja) * 2007-03-30 2011-08-03 インターナショナル・ビジネス・マシーンズ・コーポレーション エミュレートされた処理環境でメモリ・アクセスを管理する方法、システム、およびそのためのコンピュータ・プログラム

Similar Documents

Publication Publication Date Title
US7650605B2 (en) Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
JP3575593B2 (ja) オブジェクトのロック管理方法及び装置
JPH07191944A (ja) 多重プロセッサによる多数の資源への命令におけるデッドロックを防止するためのシステムおよび方法
JP2866241B2 (ja) コンピュータシステムおよびスケジューリング方法
US11221891B2 (en) Generic concurrency restriction
KR100976280B1 (ko) 하드웨어 지원을 갖는 다중 프로세서 및 다중 스레드 안전 메시지 큐
US5893157A (en) Blocking symbol control in a computer system to serialize accessing a data resource by simultaneous processor requests
US20070067770A1 (en) System and method for reduced overhead in multithreaded programs
CA2165493A1 (en) Method and apparatus for crash safe enforcement of mutually exclusive access to shared resources in a multitasking computer system
US20090059951A1 (en) Program control device
WO2011096163A1 (ja) 情報処理システム、排他制御方法および排他制御用プログラム
JP2001265611A (ja) コンピュータシステム、メモリ管理方法、記憶媒体及びプログラム伝送装置
JP2000029726A (ja) Javaプログラミング言語で書かれたプログラミングのための高速同期方法
JP3546694B2 (ja) マルチスレッド計算機システム及びマルチスレッド実行制御方法
US5708808A (en) Method and apparatus for concurrency with critical regions
Takada et al. A novel approach to multiprogrammed multiprocessor synchronization for real-time kernels
EP1299801B1 (en) Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US20100037086A1 (en) Robust critical section design in multithreaded applications
Lehey Improving the FreeBSD SMP Implementation.
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
JP2001256065A (ja) 排他制御方法及び計算機システム
US7689992B2 (en) Sharing lock mechanism between protocol layers
JPH0855092A (ja) プロセッサシステムとその制御方法
JPH01297760A (ja) タスク制御方式及びオンライン・トランザクション・システム
JPH07319716A (ja) 計算機システムの資源の排他制御方式