JPH09198265A - マルチスレッド型プログラミング環境における共用資源への並行同時アクセスを自動的に管理する方法及びそのための装置 - Google Patents

マルチスレッド型プログラミング環境における共用資源への並行同時アクセスを自動的に管理する方法及びそのための装置

Info

Publication number
JPH09198265A
JPH09198265A JP9010088A JP1008897A JPH09198265A JP H09198265 A JPH09198265 A JP H09198265A JP 9010088 A JP9010088 A JP 9010088A JP 1008897 A JP1008897 A JP 1008897A JP H09198265 A JPH09198265 A JP H09198265A
Authority
JP
Japan
Prior art keywords
thread
resource
lock
threads
counter
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
JP9010088A
Other languages
English (en)
Inventor
Peter D Clark
ピーター・ディー・クラーク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH09198265A publication Critical patent/JPH09198265A/ja
Pending legal-status Critical Current

Links

Classifications

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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 プログラム内のアプリケーション展開や制
御の正常な流れを損なうことなく、シングルアクセス資
源に対するロックをどのスレッドからでも自動的に設定
しかつ解放することができる汎用性があって使いやすい
機構を提供すること。 【解決手段】 プログラムの1つのスレッドに、そのス
レッドが現在その資源の使用を必要とするか否かに関わ
らず、その資源に関連するロックの所有権を与えること
によって、プログラムの他のスレッドにまさる優先権を
与える。これら他のスレッドは、資源の使用が必要なと
き、そのことを優先スレッドに知らせるようになってい
る。優先スレッドは、資源を使用し終え、別のスレッド
が資源を使用するために待っていることを検知すると、
その資源についての資源ロックを解放する。優先スレッ
ドは、資源を解放した後、自動的に資源ロックを要求す
る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、単一のプログラム
が同時アクティブな複数のスレッドを持つことが可能な
コンピュータシステムに関し、より詳しくは、同じプロ
グラムの複数スレッド間における共用資源を管理する方
法及びそのための装置に関する。
【0002】
【従来の技術】実行中のプロセスは、メモリ、モデム及
びプリンタのような資源を利用する。これらの資源をフ
ルに利用するために、複数のプロセスが資源を共用する
ことを可能にするオペレーティングシステムが開発され
てきた。そのために、ユーザは、各ワードプロセッシン
グプログラム毎に1台のプリンタを購入しなければらな
らい訳ではなく、並列実行される複数のワードプロセッ
シングプログラムによって共用されるプリンタを1台だ
け買えばよい。
【0003】上に述べたように、資源は共用することが
できても、多くの資源は、特定の時点で2つ以上のエン
ティティによって使用することはできない。一時に2つ
以上のエンティティにより信頼性をもって使用すること
ができない資源を、以下シングルアクセス資源と称す
る。たとえば、ほとんどのプリンタは、一時に2つ以上
のワードプロセッサ用の文書をプリントすることはでき
ないので、シングルアクセス資源である。その結果、多
くのオペレーティングシステムには、2つ以上のプロセ
スが同時にシングルアクセス資源にアクセスするのを防
ぐ機構が組み込まれている。
【0004】コンピュータシステムの処理能力をより十
分に利用するために、コンピュータプログラムの中に
は、特定のタスクを実行するための「ワーカースレッ
ド」を生成するよう設計されたものがある。ワーカース
レッドは、メインプログラムと同じプログラムの一部で
あるが、メインプログラムの実行とは独立に実行するよ
うスケジュールされ、そのように実行することができる
命令のシーケンスである。マルチスレッド型システムに
おいては、メインプログラム自体もスレッド(「メイン
スレッド」)と見なされる。
【0005】事象駆動型のマルチスレッド型プログラム
は、通常、ユーザのユーザインタフェース制御との対話
動作がシステムによって検出されたことをユーザに知ら
せるためのビジュアルフィードバックを生成する役割が
与えられる。たとえば、ユーザがコントロールパネル上
のボタンを選択した場合、ディスプレイをそのボタンが
押されたことを示すように更新するのは、通常、コント
ロールパネルに関連するプログラムのメインスレッドの
役割である。
【0006】初期化されると同時に、事象駆動型のマル
チスレッド型プログラムは、一般に、ウィンドウシステ
ムにユーザインタフェースオブジェクトを表示させた
後、関心のある事象(関心事象)についてオペレーティ
ングシステムに知らせる。そのような事象は、一般に、
ユーザインタフェースオブジェクトとのユーザ対話を含
む。
【0007】メインスレッドプログラムは、オペレーテ
ィングシステムに関心事象について知らせた後、オペレ
ーティングシステムによって中断状態になる。通常、メ
インスレッドは、関心事象の1つが起きるまで中断状態
に保たれる。関心事象が起きると同時に、オペレーティ
ングシステムはその事象を記述したメッセージをマルチ
スレッド型プログラムに対応するメッセージ待ち行列に
入れ、メインスレッドを起動する。メインスレッドは、
ユーザにビジュアルフィードバックを与えるようディス
プレイを更新する。さらに、メインスレッド自体がボタ
ンの選択に関連する何らかのタスクを実行し、あるいは
そのタスクを実行するためのワーカースレッドを生成す
る場合もある。
【0008】同じプログラムの多くのスレッドが同時に
アクティブになることもある。コンピュータシステムに
2つ以上のプロセッサがある場合、種々のスレッドが同
時に実行されることさえある。たとえば、マルチスレッ
ド型プログラムのメインスレッドは、メッセージを受け
取ったとき、そのメッセージを処理するための新しいワ
ーカースレッドを生成する場合がある。また、第2のメ
ッセージを受け取ると、メインスレッドはその第1のメ
ッセージを処理するための第2のワーカースレッドを生
成することがある。これらのメインスレッド、第1のワ
ーカースレッド及び第2のワーカースレッドは、全て同
時にアクティブになり得る。
【0009】それらの各スレッドは、実行しようとする
タスクによって決まるそれぞれの資源を要求する。たと
えば、上記の第1及び第2のスレッドは、両方ともユー
ザに表示されるビジュアル出力を発生するかもしれな
い。その場合は、両方のスレッドがウィンドウシステム
への接続を要求することになろう。
【0010】一部の環境においては、マルチスレッド型
プログラムはウィンドウシステムとの接続を1つしか割
り当てられない場合がある。そのために、情報を表示し
たいプログラムの種々のスレッドがその接続を共用しな
ければならない。しかしながら、ウィンドウシステムへ
の接続は、一般には、シングルアクセス資源になってい
る。
【0011】たとえば、スレッドの文脈切換えが起きた
とき、第1のワーカースレッドがその接続を介して表示
コマンドを送る途中であると仮定する。そして、スレッ
ドの文脈切換え後、第2のワーカースレッドがその接続
を介して表示コマンドを送り始めるとする。このような
状況が起きると、ウィンドウシステムは、ガーベッジが
見えるだけである。ウィンドウシステムはマルチスレッ
ド型プログラムをキルしたり、あるいはクラッシュして
ガーベッジに応答することがある。
【0012】従って、複数のプログラムが共用シングル
アクセス資源に同時にアクセスしないようにしなければ
ならないのと全く同様に、同じプログラムのスレッドが
共用シングルアクセス資源に同時にアクセスするのを防
がなければならない。残念ながら、大部分のオペレーテ
ィングシステムは、1つのプログラム内のスレッドによ
る資源への同時アクセスを防ぐようにはなっていない。
そのために、複数のスレッド間で共用資源へのアクセス
を制御するための機構を与える責任は、通常アプリケー
ションの開発者が担うことになる。
【0013】プログラムのスレッド間で共用資源アクセ
スを管理する問題の標準的な解決方法は、各共用シング
ルアクセス資源毎に「ロック」を設けることである。一
つの典型的なロックは、オーナとある状態を有すると共
に、共用資源と対応づけられたデータ構造である。一時
には、必ず1つのスレッドだけがシングルアクセス資源
にアクセスするようにするためには、アプリケーション
の開発者は、各スレッドがその資源にアクセスする前に
その資源に関連するロックの制御権を得るように各スレ
ッドを設計しなければならない。そのために、各スレッ
ドは、ロックが他のスレッドによって保持されている
と、そのロックが解放されるまで待たなければならな
い。全てのスレッドがこのロックの基本要件を考慮して
設計されていないと、シングルアクセス資源が損なわれ
る危険性があり、あるいはプログラムがクラッシュした
り、これらの両方の不具合が起きたりする。
【0014】上記のようなロック機構を得るためには、
アプリケーション開発者は、通常、プログラムの各スレ
ッドのカスタムコードをそれらのスレッドがロックを必
要に応じて設定し、解放するように書かなければなけれ
ばならない。これは、メインスレッド(事象駆動型プロ
グラムの場合は事象ループを含む)は第三者の開発者に
よってアプリケーション開発者に供給されるベースライ
ブラリの一部であることが多いので、特に難しく、また
退屈な作業である。さらに、一部のソフトウェア開発環
境にあっては、事象ループはアプリケーション開発者か
ら見えないので、アプリケーション開発者はロック関連
の機能性を付加するための書き換えを行うことができな
い。
【0015】従来のロック機構においては、全てのスレ
ッド(メインスレッドを含む)は、ロックに関連する資
源を使う必要があるときそのロックを要求し、ロックに
関連する資源を使用し終えたときそのロックを解放しな
ければならない。従って、メインスレッドは、メッセー
ジ待ち行列中の全てのマスキングの処理を終了すると、
ウィンドウシステム接続に関連するロックを解放した
後、中断状態になり、より多くのメッセージが利用可能
になるまでその状態に保たれる。メインスレッドが中断
状態にある間は、アクティブのどのワーカースレッドも
そのロックの制御権を得て、対応する資源にアクセスす
ることができる。オペレーティングシステムは、ロック
を待っている全てのスレッドの待ち行列を持ち続ける。
スレッドによってロックが解放されると、オペレーティ
ングシステムはそのロックに関連する待ち行列中のスレ
ッドの1つを選択し、そのロックをその選択したスレッ
ドに与える。
【0016】図1は、上に述べたような方法により設計
されたロック機構を有するコンピュータシステムにおけ
るある特定の一組の動作のタイミングを示したものであ
る。図1において、時刻T0では3つのスレッド、すな
わちメインスレッド、ワーカースレッド1及びワーカー
スレッド2がアクティブになっている。最初は、プログ
ラムのメインスレッドがその資源に対するロックを保持
している。時刻T1では、メインスレッドがそのロック
に関連する資源を使用し終え、従ってロックを解放す
る。また、時刻T1では、ワーカースレッド2がその資
源を使用する必要があり、そのためにそのロックを要求
する。
【0017】時刻T2では、ワーカースレッド2がロッ
クを獲得し、ワーカースレッド1がそのロックを要求す
る。時刻T3及びT4では、ワーカースレッド2が、ワ
ーカースレッド1が中断状態にある間に、そのロックに
関連する資源の使用を必要とするワークを実行し、そし
てロックを解放する。時刻T5では、ワーカースレッド
1がオペレーティングシステムによって起動され(アク
ティブになり)、ロックを獲得する。
【0018】時刻T6では、ワーカースレッド1がその
資源を使ってワークを実行する。また、時刻T6では、
ワーカースレッド2が再度ロックを要求する。時刻T7
では、ワーカースレッド1がロックを解放する。時刻T
8では、メインスレッドがロックを要求し、ワーカース
レッド2がロックを獲得する。時刻T9では、ワーカー
スレッド1がロックを要求し、ワーカースレッド2がこ
のロックに対応するワークを実行する。時刻10では、
ワーカースレッド2がロックを解放する。
【0019】時刻T11では、メインスレッドがロック
を要求する。時刻T12では、メインスレッドがその資
源を使用する。時刻T13では、メインスレッドがロッ
クを解放する。時刻T14では、メインスレッドがロッ
クを要求し、ワーカースレッド1がロックを得る。時刻
T15では、ワーカースレッド1がこのロックに対応す
る資源が必要なワークを実行する。時刻T16では、ワ
ーカースレッド1がロックを解放する。時刻T17、T
18及びT19では、メインスレッドがロックを獲得
し、そのロックに対応する資源を使用し、次いでロック
を解放する。
【0020】
【発明が解決しようとする課題】上に述べたようなロッ
ク共用ストラテジは、種々のスレッドによって実行され
るプログラムがユーザに無応答のように見えることがあ
るという大きな短所がある。たとえば、あるワーカース
レッドが資源の制御権を得て、長時間ロックを保持する
と、メインスレッドは、その資源を使いたい他の全ての
スレッドと共に、そのロックを保持するための自己の順
番を待たなければならない。上に述べたように、メイン
スレッドは、通常、プログラムのユーザインタフェース
とのユーザの対話に応答してビジュアルフィードバック
を生成する役割を担う。従って、ユーザは、何らかのア
クションに対するビジュアル応答を、メインスレッドが
ウィンドウシステムへの接続の制御権を獲得するまでの
間待たなければならない場合がある。ユーザは、プログ
ラムから即時のビジュアルフィードバックが得られない
と、プログラムの無欠性に疑念を持ち始めることもあ
る。さらに、複数のワーカースレッドがある場合は、現
在ロックを保持するワーカースレッドがそのロックを解
放したとき、メインスレッドがロックを獲得するための
リストの最上位にないこともある。
【0021】上に述べたことから、プログラム内のアプ
リケーション展開や制御の正常な流れを損なうことな
く、シングルアクセス資源に対するロックをどのスレッ
ドからでも自動的に設定しかつ解放することができる汎
用性があって使いやすい機構を提供することは、疑いも
なく望まれるところである。また、アプリケーション開
発者がプログラムの事象ループを書き直したり、これに
アクセスしたりする必要なしに、スレッド間でロックを
管理するための機構を提供することも望まれるところで
ある。さらに、ユーザ起動事象とそのユーザ起動事象に
対応するビジュアルフィードバックとの間の遅延ができ
るだけ短くなるようなロック管理ストラテジを提供する
ことも望まれる。
【0022】
【課題を解決するための手段】本発明は、マルチスレッ
ド型コンピュータプログラムのスレッドがある資源をど
のように共用するかを管理する方法及びそのための装置
にある。本発明によれば、プログラムの1つのスレッド
に、そのスレッドが現在その資源の使用を必要としてい
るかどうかに関わらずその資源に対応するロックを保持
させることによって、そのプログラムの他のスレッドに
まさる優先権を与える。他のスレッドは、資源の使用が
必要なとき、その優先権を有する優先スレッドにそのこ
とを知らせるようになっている。優先スレッドが資源を
使用し終え、他のスレッドがその資源を使用するために
待機していることを検知すると、優先スレッドはその資
源についての資源ロックを解放する。その資源に対する
ロックを解放した後、優先スレッドは自動的にその資源
ロックを要求する。優先スレッド以外のいずれかの非優
先スレッドが資源を使用し終えた後、優先スレッドがそ
の資源を要求していれば、その非優先スレッドは、他の
スレッドがその資源を待っているか否かに関わらず、優
先スレッドに対してその資源を解放する。本発明の一実
施態様によれば、タイマー機構を用いて、いずれかのス
レッドが資源を使用するために待機しているかどうかを
優先スレッドに周期的にチェックさせる。
【0023】本発明の一態様によれば、マルチスレッド
型プログラムの複数のスレッド間で資源を共用する方法
が得られる。この方法によれば、複数のスレッドの中の
第1のスレッドがその資源に対応する資源ロックを獲得
し、それらの複数のスレッドの中の他のスレッドがその
資源の使用を必要としていることを検知するまで、その
資源ロックを保持する。第1のスレッドは、それらの複
数のスレッドの中の他のスレッドが資源の使用を要求し
ていることを検知すると、その検知に応答してその資源
の使用を全て終了し、資源ロックを解放して要求してい
る他のスレッドがその共用資源にアクセスできるように
し、そして資源ロックを要求する。第1のスレッド以外
の各スレッドは、資源を使用し終えた後、第1のスレッ
ドに対して資源ロックを解放するようになっている。
【0024】本発明のもう一つの態様によれば、ある資
源に対応する資源ロックを保持する第1のスレッドに他
の1つ以上のスレッドがその資源の使用を必要としてい
ることを知らせる方法が得られる。この方法によれば、
タイマーが起動され、第1のスレッドはそのタイマーに
基づいて周期的にアクティブにされる。第1のスレッド
は、タイマーに基づいてアクティブになると、記憶場所
の値を調べることによって、他のいずれかのスレッドが
その資源の使用を要求しているかどうかを判断する。第
1のスレッド以外の全てのスレッドは、資源の使用を要
求したとき、記憶場所の値を更新するようになってい
る。
【0025】以下、本発明を添付図面に示す実施形態に
より詳細に説明するが、これらの説明は本発明を限定す
るためのものではなく、図中同じ参照符号は同様の構成
要素・部分を指すものとする。
【0026】
【発明の実施の形態】
ハードウェアの概要 以下、本発明によるマルチスレッド型プログラムのスレ
ッド間で資源を共用する方法及びそのための装置を実施
形態により詳細に説明する。以下の説明においては、発
明の完全な理解を図るために、説明の便宜上多くの具体
的詳細事項を記載する。しかしながら、当業者にとって
は、本発明がそれらの具体的詳細事項なしで実施可能で
あることは明白であろう。その他の場合においては、本
発明を無用に不明確にすることを避けるため、周知の構
造や装置はブロック図形式により示してある。
【0027】図2において、符号100は、本発明の実
施形態を実施することができるコンピュータシステムを
示す。図示のコンピュータシステム100は、情報を伝
達するためのバスまたはその他の通信手段101、及び
バス101に接続された情報を処理するための処理手
段、すなわちプロセッサ102を有する。コンピュータ
システム100は、さらに、バス101に接続されてい
て情報及びプロセッサ102によって実行される命令を
記憶するためのランダムアクセスメモリ(RAM)また
はその他の動的記憶装置、すなわち主メモリ104を有
する。主メモリ104は、プロセッサ102による命令
の実行時に一時的変数またはその他の中間情報を記憶す
るために使用することができる。また、コンピュータシ
ステム100は、プロセッサ102用の静的情報及び命
令を記憶するためのバス101に接続されたリードオン
リーメモリ(ROM)及び/またはその他の静的記憶装
置106を有する。バス101には、情報及び命令を記
憶するためのデータ記憶装置107も接続されている。
【0028】コンピュータシステム100には、磁気デ
ィスクまたは光ディスクのようなデータ記憶装置とその
対応するディスクドライブを接続することができる。コ
ンピュータシステム100は、バス101を介してコン
ピュータユーザに情報を表示するためのブラウン管(C
RT)のような表示装置121を接続することができ
る。通常は、情報及びコマンド選択をプロセッサ102
に伝達するために、アルファニューメリック及びその他
のキーを含むアルファニューメリック入力装置またはキ
ーボード122がバス101に接続される。もう一つの
形のユーザ入力装置として、マウス、トラックボール、
またはカーソル方向キーのような方向情報及びコマンド
選択をプロセッサ102に伝達すると共に、表示装置1
21上のカーソルの動きを制御するためのカーソルコン
トロ−ル123が設けられている。この入力装置は、通
常、2軸、すなわち第1の軸(たとえばx軸)及び第2
の軸(たとえばy軸)における2自由度を有し、平面内
の位置を指定することができる。
【0029】あるいは、スタイラスまたはペンのような
他の入力装置を用いて表示装置との対話操作を行うこと
もできる。コンピュータ画面上の表示オブジェクトは、
スタイラスまたはペンを用いて表示オブジェクトに触れ
ることによって選択することができる。コンピュータ
は、タッチセンシティブスクリーンを実装することによ
って、その選択を検出する。同様に、ライトペンと光感
応スクリーンを用いて表示オブジェクトを選択すること
もできる。このように、このような装置は、マウスまた
はトラックボールを装備したシステムの場合のように
「ポイント・アンド・クリック」操作ではなく、選択位
置と選択を単一操作として検出する。スタイラス及びペ
ンベースの入力装置やタッチスクリーン及び光感応スク
リ−ンは、当技術分野において周知である。このような
システムでは、符号122で示すようなキーボードなく
し、全てのインタフェースを筆記具(ペンのような)と
してのスタイラスを介して行い、書いたテキストを光学
文字読取り(OCR)技術を用いて解釈するようにする
ことも可能である。
【0030】この実施形態においては、本発明は、コン
ピュータシステム100を用いて、スレッドが以下にさ
らに詳細に説明する技術的方法に従って資源を共用する
ようにしたマルチスレッド型プログラムを実行しようと
するものである。
【0031】ロック移管ストラテジの改善 上に述べたように、メインスレッドは、通常、ユーザと
の対話を制御するプログラムの部分になっている。メイ
ンスレッドがウィンドウシステムとの接続を使用するの
に待たなければならない時間が長いほど、ユーザにはプ
ログラムの応答が遅いように見える。従って、本発明
は、ビジュアル表示に関連する資源に関して他のスレッ
ドにまさる優先権をメインスレッドに与えるロック制御
ストラテジを提供するものである。従って、ユーザがボ
タンをクリックすると、プログラムは、即時のビジュア
ルフィードバックをユーザに与えて、プログラムの「応
答性がよい」ように感じさせる。
【0032】この実施形態のロック移管ストラテジによ
れば、メインスレッドは、明確にロックを解放するよう
要求されない限り、ビジュアル出力に関連するロックの
制御権を常時持ち続ける。このように、メインスレッド
は、たとえ休止状態にあるときでも、他のスレッドがロ
ックを要求していなければ、ロックを保持する。この点
は、全てのスレッドが、ロックに関連する資源の使用を
必要とするタスクを終了すると同時にロックを解放する
図1に示す従来のロック移管方式と明確に異なる。
【0033】本発明により得られるロック移管の技術に
よれば、ワーカースレッドは、資源の使用を必要とする
とき、資源にアクセスしたいということをメインスレッ
ドに知らせる。メインスレッドは、その都合がよいと
き、資源に関連するロックをワーカースレッドに対して
解放する。従って、メインスレッドは、資源を使用中で
あれば、その資源を必要とするタスクを終了してからそ
の資源に関連するロックを解放する。メインスレッド
は、資源を使用していなければ、ワーカースレッドがそ
の資源を使いたいという通知を受け取ると同時に、その
資源に関連するロックを即時解放する。
【0034】メインスレッドがロックを解放すると、ワ
ーカースレッドはそのロックを得て、資源にアクセスす
ることができる。しかしながら、メインスレッドは、ロ
ックを解放するとすぐにロックを要求する。ワーカース
レッドは、資源を使用し終えると、他のスレッドもロッ
クの制御権を要求しているか否かに関わらず、ロックを
解放して、メインスレッドに戻す。
【0035】図3は、上記のロック移管の技術を実装し
たシステムにおけるある特定の一連の動作のタイミング
を示したものである。図3において、時刻T0で、メイ
ンスレッドがロックを保持しており、ワーカースレッド
1がロックを要求する。時刻T1で、メインスレッドは
ロックを解除し、ワーカスレッド2がロックを要求す
る。時刻T2では、メインスレッドがロックを要求し、
ワーカースレッド1がロックを得る。ここで、メインス
レッドのロック要求は、ロック解放後自動的に行われ、
メインスレッドが現在そのロックに関連する資源を必要
としているか否かには依存しないということに留意すべ
きである。
【0036】時刻T3では、ワーカースレッド1がその
ロックに関連する資源を使用するワークを実行し、その
後時刻T4でロックを解放する。時刻T5では、メイン
スレッドがロックを獲得する。ここで、メインスレッド
は、ワーカースレッド2がメインスレッドよりも前から
ロックを要求しているにもかかわらず、ロックを得てい
るということに留意する必要がある。メインスレッドの
ロック要求は、常に、他の全ての待ち状態の要求にまさ
る優先権を与えられている。
【0037】メインスレッドは、時刻T6で資源を必要
とする何らかのワークを実行する。また、時刻T6で
は、ワーカースレッド1もロックを要求する。メインス
レッドは、時刻T7で資源を使用し終え、ロックを解放
する。ここで、このロック解放は、メインスレッドがそ
の資源使用を終了することに応答して自動的に行われる
訳ではないということに留意すべきである。メインスレ
ッドは、(1)メインスレッドが資源を使用し終え、か
つ(2)他のスレッドがその資源を使用したいという待
ち状態の要求が少なくとも1つあるときに限り、ロック
を解放する。時刻T7で資源を使用したいという待ち状
態の要求がなければ、メインスレッドは時刻T7でロッ
クを解放しないはずである。
【0038】時刻T8で、メインスレッドがロックを要
求し、ワーカースレッド2がロックを獲得する。上に述
べたように、メインスレッドは、メインスレッドがロッ
クを解放する都度、自動的にロックを要求する。時刻T
9で、ワーカースレッド2が資源を使用するタスクを実
行する。時刻T10で、ワーカースレッド2がロックを
解放する。時刻T11で、メインスレッドがロックを獲
得する。ここで、メインスレッドは、たとえワーカース
レッド1の要求がメインスレッドの要求より前に出され
た場合でも、ワーカースレッド1より先にロックを獲得
し、メインスレッドはそのロックに関連する資源を必ず
しも使用する必要はないということに留意すべきであ
る。
【0039】時刻T12で、メインスレッドは、資源が
必要な何らかのワークを実行する。時刻T13で、メイ
ンスレッドがロックを解放する。時刻T14では、ワー
カースレッド1がロックを獲得する。時刻T15で、ワ
ーカースレッド1が資源を使用するタスクを実行する。
時刻T16では、ワーカースレッド1がロックを解放す
る。時刻T17では、メインスレッドがロックを獲得す
る。時刻T17では、メインスレッドが資源の使用が必
要な何らかの処理を実行する。
【0040】以上説明したロック移管ストラテジは、メ
インスレッドが受ける遅延が短くなるという点で、従来
のロックストラテジより優れている。メインスレッドが
受ける遅延の短縮は、ユーザが受ける遅延の短縮に直結
する。たとえば、時刻T9で、ユーザ事象が起きると、
メインスレッドは時刻T12でその事象に応答すること
ができる。従来のロック移管ストラテジならば、ワーカ
ースレッド1が時刻T11でロックを獲得し、メインス
レッドは、ワーカースレッド1がそのタスクを終了し
て、その資源に対するロックを解放するまでユーザ事象
に応答することができないはずである。
【0041】指示型ロック移管 上述のロック移管ストラテジでは、ワーカースレッド
は、他のスレッドが資源ロックを待っている場合でも、
ロックの制御権をメインスレッドに戻すことができなけ
ればならない。本発明の一実施形態によれば、これは、
ロックの状態を、ロックを待っているスレッドの中のど
のスレッドがロックへのアクセス権を持つことができる
かを決定する「鍵穴」として用いることにより可能にな
る。
【0042】具体的に説明すると、各ロックにはそれぞ
れ何らかの状態が付随している。この実施形態において
は、スレッドがロックへのアクセスを要求するとき、そ
のスレッドは、その要求にに「キー」を入れることがで
きる。スレッドがロックを解放するとき、そのスレッド
は、解放後にそのロックが取るべき状態を指定すること
ができる。ロックがある特定の状態で解放されると、以
後、そのロックはそのロックの状態に対応するキーの入
ったスレッドによってしか獲得されない。ロックを要求
しても、このロックの現在の状態に対応しないキーを指
定したスレッドは、そのロックの制御権を与えられな
い。
【0043】本発明の一実施形態によれば、上記の状態
及びキーは、どちらも単に数値であってもよい。そのよ
うな実施形態においては、ロック管理機構は、ロックに
関連する状態値と一致するキー値が入っている要求を検
討するだけ済む用に構成することができる。
【0044】上記のような機構を用いて、ワーカースレ
ッドは、ロックをメインスレッドに渡すための第1の状
態でロックを解放するようになっており、メインスレッ
ドは、ロックをワーカースレッドに渡すための第2の状
態でロックを解放する。ワーカースレッドは、第2の状
態に対応するキーをそれらのロック要求に入れて送るよ
うになっており、メインスレッドは、ロックを要求する
とき、第1の状態に対応するキーを送る。このような条
件下で、ロックは、いずれかのワーカースレッドによっ
て解放された後、たとえそのロックを待っている他のワ
ーカースレッドがあっても、メインスレッドに戻すこと
ができる。
【0045】登録に基づく通信機構 上述のロック共用ストラテジは、ワーカースレッドとメ
インスレッドとの間で通信を行うための機構が必要であ
る。具体的にいうと、メインスレッドは、(1)ワーカ
ースレッドがロックを必要としているとき、及び(2)
ロックを保持していたワーカースレッドがそのロックを
解放したとき、それらを検知しなければならない。本発
明の一実施形態によれば、多くのオペレーティングシス
テムで与えられる登録機能を用いて、上述のロック移管
ストラテジを実施するのに必要なメインスレッドとワー
カースレッドとの間の通信を確保することができる。
【0046】詳しく説明すると、メインスレッドは、各
シングルアクセス共用資源毎に、ファイル記述子または
ネットワーク接続上のソケットのようなエンティティイ
ンジケータをオペレーティングシステムに登録すること
ができる。エンティティインジケータを登録することに
よって、メインスレッドは、オペレーティングシステム
に、そのエンティティインジケータに関連するエンティ
ティへのアクセスはコンピュータプログラムにとっての
関心事象であるということを知らせる。従って、メイン
スレッドがファイル記述子を登録すると、そのファイル
記述子に関連するファイルがアクセスされたとき、オペ
レーティングシステムはその事象を確認するメッセージ
を生成し、そのメッセージをメインスレッドの事象待ち
行列に入れ、メインスレッドを起動する。
【0047】メインスレッドがエンティティインジケー
タを登録していると、ワーカースレッドは、ロックを必
要としていることをメインスレッドを起動する動作を実
行することによってメインスレッドに知らせる。たとえ
ば、ファイル記述子を用いる場合は、ワーカースレッド
はファイルに書込みを行う。また、ネットワーク接続を
用いる場合は、ワーカースレッドはネットワーク接続を
介して何らかの情報を送る。
【0048】オペレーティングシステムは、ワーカース
レッドによって実行された動作に応答して、その事象を
表すメッセージをメインスレッドの事象待ち行列に入
れ、メインスレッドを起動する。メインスレッドは、そ
のメッセージを読むことによって、ワーカースレッドが
登録エンティティに対応する資源を使用する必要がある
ということを知らされる。
【0049】ファイル記述子またはネットワークソケッ
トを用いてスレッド間の通信を行うことの利点は、登録
機構は通常オペレーティングシステムによって提供され
るため、メインスレッドがこの通信をサポートするのに
必要な機能性を最小限に抑えられるということである。
従って、メインスレッドは該当するマスキングを受け取
ると同時に該当するロックを解放するようになっていさ
えすればよい。
【0050】上記の登録による方法は、ワーカースレッ
ドの数が多いと、効率が悪くなる。ワーカースレッドが
たくさんある場合は、事象をトリガーする動作を実行す
るのに必要な処理資源の量が顕著に大きくなる。たとえ
ば、ファイルまたはソケットを書き込むのは非常に時間
を要する動作である。ロックを共用するワーカースレッ
ドが沢山ある場合は、実際のタスクの実行よりむしろ通
信オーバーヘッドによって多大の時間が費消される。
【0051】上記の登録に基づく方法の第2の欠点は、
プログラムによって登録できるある種のエンティティイ
ンジケータの数がオペレーティングシステムによってし
ばしば制限されるということである。たとえば、UNI
Xオペレーティングシステムでは、各プロセスはほんの
少数のファイル記述子しか登録することを許容されな
い。
【0052】第3の欠点は、オペレーティングシステム
によって、エンティティインジケータがトリガーされた
待ち状態の通知の数がしばしば制限されることである。
ファイルに書き込むか、ネットワーク接続を介して何ら
かの情報を送ることによって共用資源へのアクセスを要
求するワーカースレッドが多数ある場合は、オペレーテ
ィングシステムは、旧い通知を破棄することによって、
新しい通知を入れるための余裕を作る。その結果、メイ
ンスレッドは、待ち状態のワーカースレッド数を把握し
続けられなくなることがある。
【0053】カウンタに基づく通信機構 図4は、メインスレッド型プログラム404のプロセス
空間内に、カウンタ値402を記憶するための記憶場所
が割り当てられている本発明の一実施形態を示す。この
カウンタ値の記憶場所に対してロック406が設定され
る。このカウンタ値記憶場所に対するロックを以下「カ
ウンタロック」406と称し、シングルアクセス共用資
源408に関連するロックを「資源ロック」410と称
する。
【0054】414及び416で示す各ワーカースレッ
ドは、資源408にアクセスしたいとき、図6に示すス
テップを実行するようになっている。たとえば、ワーカ
ースレッド414が、ある特定のタスクを実行するのに
資源408を必要とするものと仮定する。ステップ60
0で、ワーカースレッド414はカウンタロック406
を獲得する。ステップ602では、ワーカースレッド4
14はカウンタ値記憶場所のカウンタ値402をインク
リメントする。ステップ604では、ワーカースレッド
414はカウンタロック406を解放する。ステップ6
06では、ワーカースレッド414は資源ロック410
についての要求を送出する。ステップ610では、ワー
カースレッド414は中断状態になる。
【0055】メインスレッド418は、(1)メインス
レッドが資源408を使用しておらず、かつ(2)1つ
以上のワーカースレッドが資源ロック410を要求して
いるとき、資源ロック410を解放するようになってい
る。メインスレッド418によって実行されるステップ
を図5に示す。ステップ500で、メインスレッド41
8はカウンタ402をチェックして、いずれかのワーカ
ースレッドが資源ロック410を要求しているかどうか
を判断する。カウンタ402のノンゼロ値は、現在少な
くとも1つのワーカースレッド414がシングルアクセ
ス資源408を使用したがっているということをメイン
スレッド418に知らせる信号である。カウンタ402
の値がゼロの場合、メインスレッドは中断状態になる
(すなわち事象待ち状態を取る)(ステップ502)。
【0056】メインスレッド418は、カウンタ402
のノンゼロ値を検出すると、資源408を使用するタス
クを全て終了する。ステップ504は、資源408を他
のタスクに渡す前に実行しなければならないクリア動作
を伴う。たとえば、資源408がウィンドウシステムと
の接続である場合は、ステップ504にはウィンドウサ
ーバ接続を全て解消する動作を含む。ステップ506で
は、メインスレッド418は、資源ロック410の状態
420をワーカースレッド414及び416によって使
用されるキーに対応する状態に設定する。ステップ50
7では、メインスレッド418は、資源408に対応す
るフラグ422をセットして、メインスレッド418が
資源ロック410を待っているということを指示する。
ステップ508では、メインスレッド418は、資源ロ
ックを解放する。
【0057】ステップ509、510及び511では、
メインスレッド418はカウンタロックを得、カウンタ
402をデクリメントし、カウンタロックを解放する。
ステップ512では、メインスレッド418は資源ロッ
クを要求する。オペレーティングシステム412は、メ
インスレッド41の要求426を資源ロック要求待ち行
列424に入れる。その要求426には、メインスレッ
ド418が要求426を出したエンティティであること
を示す送出者情報428及びキー値430が含まれる。
メインスレッド418は、次に、資源ロック410につ
いてのその要求が受け入れられるまで、中断状態にな
る。
【0058】オペレーティングシステム412は、資源
ロック410が空いていることを検知すると、そのロッ
ク410を要求しているワーカースレッドの1つに対し
てそのロック410を認める。具体的にいうと、オペレ
ーティングシステム412は、資源ロック要求待ち行列
424の中の要求を選択し、その要求中のキー値を資源
ロック410の現在の状態420と比較する。そして、
キー値がロック410の状態420と一致すれば、オペ
レーティングシステム412はその要求を認める。キー
値が一実施形態においては、420と一致しなければ、
オペレーティングシステム42は他の要求を選択し、上
記のステップを繰り返し実行する。
【0059】オペレーティングシステム412は、この
プロセスを、資源ロック410の状態420に対応する
キーを有する要求に遭遇するまで続ける。オペレーティ
ングシステム412は、資源ロック410の状態420
に対応するキーを有する要求に遭遇すると、資源要求4
10をその要求を送出したスレッドに与え、そのスレッ
ドを起動する。
【0060】不都合なことに、ワーカースレッド414
がカウンタ402をインクリメントしたとき、メインス
レッド418が中断されるかもしれない。さらに、ワー
カースレッド414がカウンタロック406を獲得する
か、カウンタ402をインクリメントしたとき、関心事
象が発生しないと、そのために、メインスレッド418
は、中断状態であっても起動されない。その結果、メイ
ンスレッド418が中断状態で、関心事象の発生を待っ
ている間、メインスレッド418待ちの状態になるた
め、システムの効率が著しく低下することがある。
【0061】そのような遅延を避けるため、メインスレ
ッド418の事象ループを拡張して、資源ロック410
を渡すようにという要求の有無をメインスレッド418
に周期的にチェックさせるタイマー431を含むように
する。具体的にいうと、メインスレッド418がタイマ
ー431をオペレーティングシステム412に登録す
る。タイマー431は関心事象を一定間隔で発生する。
タイマー431がオフになると、オペレーティングシス
テム412はそのタイマー431の事象を示すメッセー
ジをメインスレッド418の事象待ち行列432に入
れ、メインスレッド418を起動する。メインスレッド
418は、このタイマー事象によって起動されると同時
に、図5を参照して上に説明したステップを実行する。
【0062】上に述べたように、メインスレッド418
によって資源ロック410が解放されると、オペレーテ
ィングシステム412は、資源ロック410の所有権を
シングルアクセス資源408を使用するために待ってい
るワーカースレッドの1つに渡す。資源ロック410の
所有権を与えられたワーカースレッド410は、図7に
示すステップを実行する。
【0063】ステップ700では、ワーカースレッド4
14が資源ロック410を得る。ステップ702で、ワ
ーカースレッド414は、資源408を使ってタスクを
実行する。ワーカースレッド414は、資源408を使
用し終えると、資源408を他のスレッドが使用できる
状態に整えるために必要なクリア動作を実行する。ステ
ップ704では、ワーカースレッド414は資源408
に関連するフラグ422をチェックして、メインスレッ
ド418が資源ロック410を待っているかどうかを確
認する。メインスレッド418が資源ロック410を待
っていることを、フラグ422が示している場合には、
ワーカースレッド414は資源ロック410の状態42
0をメインスレッド418によって使用されるキー43
0と一致する状態に設定してから(ステップ708)、
資源ロック410を解放する(ステップ710)。メイ
ンスレッド418が資源ロック410を待っていること
をフラグ422が示していない場合は、ワーカースレッ
ド414は資源ロック410の状態420をワーカース
レッドによって使用されるキーと一致する状態に設定し
てから(ステップ706)、資源ロック410を解放す
る(ステップ710)。
【0064】ワーカースレッド414が資源ロック41
0を解放すると、オペレーティングシステム412はロ
ックを得させるために他のスレッドを選択する。上に述
べたように、オペレーティングシステム412は、資源
ロック410の現在の状態に適合するキーを持つ要求を
検討するだけである。ワーカースレッド414が、資源
ロック410をメインスレッド418によって使用され
るキーに対応する状態に置いたと仮定すると、メインス
レッド418だけが資源ロック410の状態に一致する
キーを持つ唯一のスレッドになる。従って、オペレーテ
ィングシステム412は、資源ロック410の所有権を
メインスレッド418に与える。
【0065】オペレーティングシステム412は、資源
ロック410をメインスレッド418に与えた後、メイ
ンスレッド418を起動する。メインスレッド418
は、起動されると、資源408に関連するフラグ422
をセットして、メインスレッド418は制御ロック41
0を待っていないということを指示する。
【0066】システムによっては、オペレーティングシ
ステム412が状態/キー比較を行うようになっていな
い場合がある。そのようなシステムでは、オペレーティ
ングシステム412は、ワーカースレッド414が資源
ロック410を解放した後、メインスレッド418が資
源ロック410を待っていても、資源ロック410をメ
インスレッド418ではなく別のワーカースレッドに与
えるかもしれない。その場合、オペレーティングシステ
ム412は、資源ブロック410が与えられたワーカー
スレッドを起動する。
【0067】このような条件下では、各ワーカースレッ
ドは、実際に資源408を使用する前に、メインスレッ
ド418が資源ロック410を待っていることをフラグ
422が指示しているかどうかを確認するようになって
いる。フラグ422がメインスレッド418が資源ロッ
ク410を待っているということを指示している場合
は、ワーカースレッド414は、資源408を使用する
前に資源ロック410を即時解放する。この動作が、フ
ラグ422がメインスレッド418が資源ロック410
を待っているということを指示している間、オペレーテ
ィングシステム412により資源ロックを与えられた全
てのワーカースレッドについて繰り返される。その最後
には、オペレーティングシステム412は資源ロック4
10をメインスレッド418に与える。
【0068】前に述べた登録に基づく方法に付随する問
題は、このカウンタに基づく通信機構では回避される。
詳しくいうと、ワーカースレッド414が資源408を
使いたいということをメインスレッド418に知らせる
のに文脈切換えを必要としないので、処理のオーバヘッ
ドの大半が回避される。さらに、アプリケーションの開
発者に与えられるアプリケーションの枠組みでは、タイ
マー431の機能性が既に事象ループに組み入れられて
いるかもしれないので、サポートの開発者は、事象ルー
プを書き換える必要はなく、あるいは事象ループにアク
セスする必要さえない。
【0069】デッドロックを防ぐための直接ロック移管 時には、デッドロックを防ぐために、メインスレッド4
18が資源ロック410をワーカースレッドに直接渡す
ことが必要な場合もある。たとえば、メインスレッド4
18は、ユーザ事象に応答して、ワーカースレッド41
4に対して発呼するかもしれない。その場合、メインス
レッド418は、ワーカースレッド414がそのタスク
を終了するまで中断状態になる。ワーカースレッド41
4は、ワーカースレッド416に何らかのタスクを実行
するよう発呼することができる。ワーカースレッド41
6によって実行されるタスクは、資源408の使用を必
要とすることがある。その場合、ワーカースレッド41
6は、資源ロック410を求める要求を送出し、資源ロ
ック410が与えられるまで中断状態になる。
【0070】上記の状況は、メインスレッド418はワ
ーカースレッド414がそのタスクを終了するまで、ア
クティブになって資源ロック410を解放することはな
く、ワーカースレッド414はワーカースレッド416
がそのタスクを終了するまで自己のタスクを終了するこ
とはできず、またワーカースレッド416はメインスレ
ッド418が資源ロック410を解放するまでそのタス
クを終了することはできないので、デッドロックにな
る。
【0071】このようなデッドロックの問題をなくすた
め、メインスレッド418は、ワーカースレッドが資源
408を使用することを要するような発呼をする前に、
資源ロック410を明示的に解放する。メインスレッド
418は、資源ロック410を明示的に解放した後、資
源ロック410を要求する。すると、メインスレッド4
18は、資源408の使用について他のスレッドを排除
することなく、中断状態を取ることができる。
【0072】資源408を使用していたワーカースレッ
ド416は、資源408を使用し終えると、資源ロック
410の状態420をメインスレッド418によって使
用されるキーに対応する状態に設定する。メインスレッ
ド418により呼び出されたワーカースレッド414が
そのタスクを終了すると、オペレーティングシステム4
12はメインスレッド418を起動する。このように起
動されたメインスレッド418は、資源410の制御権
を得る。
【0073】以上説明した本発明の実施形態において
は、説明の便宜上いろいろな仮定を行った。たとえば、
資源に関する優先権はプログラムのメインスレッドに与
えるものと仮定した。資源がウィンドウシステムとの接
続であり、メインスレッドがユーザの対話動作に応答し
てビジュアルフィードバックを生成する役割を持つ場合
においては、このように仮定する方が望ましい。しかし
ながら、他の条件下においては、資源に関して、特定の
ワーカースレッドにメインスレッドを含む他の全てのス
レッドにまさる優先権を与えることが望ましい場合もあ
る。従って、本発明は、メインスレッドに優先権を与え
る実施形態に限定されるものではない。
【0074】以上、この明細書では、本発明を特定の実
施形態に関連して説明した。しかしながら、本発明につ
いて、その広義の精神及び範囲を逸脱することなく種々
の修正態様を並びに変更態様を実施することが可能なこ
とは明らかであろう。たとえば、メインスレッドに、資
源ロックを解放するときカウンタをデクリメントさせる
のではなく、資源ロックを与えられたワーカースレッド
が資源を使用する前、またはその後にカウンタをデクリ
メントするようにしてもよい。従って、本願明細書及び
図面は、限定的な意味ではなく、例示説明的な意味にお
いて解釈すべきものである。
【図面の簡単な説明】
【図1】 従来のロック共用ストラテジを用いたロック
方式における典型的な動作シーケンスを示すタイミング
図である。
【図2】 本発明の一実施形態を実施するよう構成する
ことが可能なコンピュータシステムのブロック図であ
る。
【図3】 本発明の一実施形態による改善されたロック
共用ストラテジを用いたシステムにおける動作シーケン
スを示すタイミング図である。
【図4】 本発明の一実施形態に従い設計された資源共
用機構を具備したシステムを示すブロック図である。
【図5】 タイマー事象に応答して起動されたメインス
レッドによって実行されるステップを示すフローチャー
トである。
【図6】 シングルアクセス資源の使用を必要とするワ
ーカースレッドによって実行されるステップを示すフロ
ーチャートである。
【図7】 シングルアクセス資源に関連するロックを与
えられたワーカースレッドによって実行されるステップ
を示すフローチャートである。
【符号の説明】
100 コンピュータシステム、101 ばす、102
プロセッサ、104主メモリ、107 記憶装置、1
21 表示装置、122 キーボード、123 カーソ
ルコントロール。

Claims (24)

    【特許請求の範囲】
  1. 【請求項1】 マルチスレッド型プログラムの複数のス
    レッド間で資源を共用する方法において: (A)前記複数のスレッドの中の第1のスレッドに、 (A1)前記資源に関連する資源ロックを獲得するステ
    ップと; (A2)その資源ロックを前記複数のスレッドの中の他
    のスレッドが前記資源の使用を要求していることを検知
    するまで保持するステップと; (A3)前記複数のスレッドの中の他のスレッドの前記
    資源の使用の要求の検知に応答して、 (a)その資源の使用を全て終了するステップと; (b)その資源ロックを解放するステップと; (c)その資源ロックを要求するステップと; を実行するステップと;を実行させるステップ;を具備
    した方法。
  2. 【請求項2】 上記複数のスレッドの中の上記第1のス
    レッド以外の各スレッドに、上記資源の使用を終了した
    後、上記資源ロックを第1のスレッドに対して解放させ
    るステップをさらに具備した請求項1記載の方法。
  3. 【請求項3】 上記複数のスレッドの中の第2のスレッ
    ドに、その第2のスレッドが資源を使用したいというこ
    とをカウンタをインクリメントすることによって指示さ
    せるステップと;上記第1のスレッドに、複数のスレッ
    ドの中の他のスレッドがその資源の使用を必要としてい
    ることを前記カウンタを調べることによって検知させる
    ステップと;をさらに具備した請求項1記載の方法。
  4. 【請求項4】 上記第2のスレッドに、上記カウンタを
    インクリメントする前にカウンタに関連するカウンタロ
    ックを獲得させるステップと;上記第2のスレッドに、
    カウンタをインクリメントした後そのカウンタに関連す
    るカウンタロックを解放させるステップと;をさらに具
    備した請求項3記載の方法。
  5. 【請求項5】 タイマーを起動するステップと;そのタ
    イマーで所定の時間が経過したとき、上記第1のスレッ
    ドに、上記複数のスレッドの中の他のスレッドが上記資
    源の使用を必要としているか否かを判断させるステップ
    と;をさらに具備した請求項1記載の方法。
  6. 【請求項6】 上記カウンタに関連するカウンタロック
    を獲得するステップと;上記第1のスレッドが上記資源
    ロックを解放したとき、これに応答してそのカウンタを
    デクリメントするステップと;そのカウンタに関連する
    カウンタロックを解放するステップと;をさらに具備し
    た請求項3記載の方法。
  7. 【請求項7】 上記カウンタロックを獲得するステッ
    プ、上記カウンタをデクリメントするステップ、及びそ
    のカウンタロックを解放するステップが上記第1のスレ
    ッドによって実行される請求項6記載の方法。
  8. 【請求項8】 上記カウンタロックを獲得するステッ
    プ、上記カウンタをデクリメントするステップ、及びそ
    のカウンタロックを解除するステップが上記第2のスレ
    ッドによって実行される請求項6記載の方法。
  9. 【請求項9】 第1のキーを含むロック要求を送出する
    ことによって上記第1のスレッドに資源ロックを要求さ
    せるステップと;上記複数のスレッドの中の上記第1の
    スレッド以外の各スレッドに、第1のキーに対応する状
    態で資源ロックを解放させるステップと:をさらに具備
    した方法。
  10. 【請求項10】 上記資源がウィンドウシステムとの接
    続であり;上記資源の使用を終了するステップが上記ウ
    ィンドウシステムとの接続を全て解消するステップを含
    む;請求項1記載の装置。
  11. 【請求項11】 ある資源に関連する資源ロックを保持
    する第1のスレッドに、1つ以上の他のスレッドがその
    資源の使用を必要としていることを知らせる方法におい
    て;タイマーを起動するステップと;上記第1のスレッ
    ドを前記タイマーに基づいて周期的に起動するステップ
    と;上記第1のスレッドが上記タイマーに基づいて起動
    されたとき、その第1のスレッドに、ある記憶場所の値
    を調べることによって、他のいずれかのスレッドがその
    資源の使用を必要としているか否かを判断させるステッ
    プと;上記第1のスレッド以外のスレッドがその資源の
    使用を必要としているとき、上記第1のスレッド以外の
    スレッドに上記記憶場所の値を更新させるステップと;
    を具備した方法。
  12. 【請求項12】 上記記憶場所の値を調べた後、その値
    が他のどのスレッドも上記資源の使用を必要としていな
    いことを指示している場合に、上記第1のスレッドを中
    断状態にするステップと;上記記憶場所の値を調べた
    後、その値が他のスレッドが上記資源の使用を必要とし
    ていることを指示している場合に、上記第1のスレッド
    に上記資源ロックを解放させるステップと;をさらに具
    備した請求項11記載の方法。
  13. 【請求項13】 上記第1のスレッドに、上記資源ロッ
    クの解放に応答して上記資源ロックを要求させるステッ
    プをさらに具備した請求項12記載の方法。
  14. 【請求項14】 上記記憶場所の上記値が、上記第1の
    スレッド以外のいくつのスレッドが上記資源を使用する
    ために待っているかを指示し;第1のスレッドが上記資
    源ロックを解放するのに応答して、その資源を使用する
    ために待っているスレッドが1つ少なくなったことを指
    示するよう上記記憶場所のその値を更新するステップを
    さらに具備した;請求項12記載の方法。
  15. 【請求項15】 プロセッサによって実行されたとき、
    プロセッサにマルチスレッド型プログラムの複数のスレ
    ッド間で資源をどのように共用するかを管理させる命令
    シーケンスが記憶されたコンピュータ可読媒体におい
    て、その命令シーケンスが: (A)上記複数のスレッドの中の第1のスレッドに、 (A1)上記資源に関連する資源ロックを獲得するステ
    ップと; (A2)上記資源ロックを上記複数のスレッドの中の他
    のスレッドが上記資源の使用を要求していることを検知
    するまで保持するステップと; (A3)上記複数のスレッドの中の他のスレッドが上記
    資源の使用を要求していることの検知に応答して、 (a)上記資源の使用を全て終了するステップと; (b)上記資源ロックを解放するステップと; (c)上記資源ロックを要求するステップと;を実行す
    るステップと;を実行させるための命令;をコンピュー
    タ可読媒体。
  16. 【請求項16】 上記複数のスレッドの中の上記第1の
    スレッド以外の各スレッドに、上記資源の使用を終了し
    た後、上記資源ロックを上記第1のスレッドに対して解
    放させる命令をさらに具備した請求項15記載のコンピ
    ュータ可読媒体。
  17. 【請求項17】 上記複数のスレッドの中の第2のスレ
    ッドに、上記第2のスレッドが上記資源を使用したいと
    いうことをカウンタをインクリメントすることによって
    指示させる命令と;上記第1のスレッドに、上記複数の
    スレッドの中の他のスレッドが上記資源の使用を必要と
    していることを上記カウンタを調べることによって検知
    させるための命令と;をさらに具備した請求項15記載
    のコンピュータ可読媒体。
  18. 【請求項18】 上記第2のスレッドに、上記カウンタ
    をインクリメントする前に上記カウンタに関連するカウ
    ンタロックを獲得させるための命令と;上記第2のスレ
    ッドに、上記カウンタをインクリメントした後上記カウ
    ンタに関連するカウンタロックを解放させる命令と;を
    さらに具備した請求項17記載のコンピュータ可読媒
    体。
  19. 【請求項19】 タイマーを起動するための命令と;上
    記タイマー上で所定の時間が経過したとき、上記第1の
    スレッドに、上記複数のスレッドの中の他のスレッドが
    上記資源の使用を必要としているか否かを判断させるた
    めの命令と;をさらに具備した請求項15記載のコンピ
    ュータ可読媒体。
  20. 【請求項20】 第1のキーを含むロック要求を送出す
    ることによって上記第1のスレッドに資源ロックを要求
    させる命令と;上記複数のスレッドの中の上記第1のス
    レッド以外の各スレッドに、上記第1のキーに対応する
    状態で上記資源ロックを解放させるための命令と:をさ
    らに具備した請求項16記載のコンピュータ可読媒体。
  21. 【請求項21】 資源に関連する資源ロック、及びある
    値を記憶するメモリと;上記資源に関連する上記資源ロ
    ックを保持する第1のスレッド、及び1つ以上の他のス
    レッドを含むマルチスレッド型プログラムを実行するた
    めの少なくとも1つのプロセッサと;タイマーとを具備
    し、上記少なくとも1つのプロセッサが:上記第1のス
    レッドを上記タイマーに基づいて周期的に起動し;上記
    第1のスレッドが上記タイマーに基づいて起動されたと
    き、上記第1のスレッドに、上記値を調べることによっ
    て、他のいずれかのスレッドが上記資源の使用を必要と
    しているか否かを判断させ;上記第1のスレッド以外の
    スレッドが上記資源の使用を必要としているとき、上記
    第1のスレッド以外の上記スレッドに上記値を更新させ
    る;ことによって、上記第1のスレッドに1つ以上の他
    のスレッドが上記資源の使用を必要としていることを知
    らせるよう構成されている;コンピュータシステム。
  22. 【請求項22】 上記少なくとも1つのプロセッサが、
    さらに:上記メモリの値を調べた後、上記値が他のどの
    スレッドも上記資源の使用を必要としていないことを指
    示している場合に、上記第1のスレッドを中断状態に
    し;上記メモリの値を調べた後、上記値が他のスレッド
    が上記資源の使用を必要としていることを指示している
    場合に、上記第1のスレッドに上記資源ロックを解放さ
    せる;よう構成されている請求項21記載のコンピュー
    タシステム。
  23. 【請求項23】 上記少なくとも1つのプロセッサが、
    さらに、上記第1のスレッドに、上記資源ロックの解放
    に応答して上記資源ロックを要求させるよう構成されて
    いる請求項22記載のコンピュータシステム。
  24. 【請求項24】 上記値が、上記第1のスレッド以外の
    いくつのスレッドが上記資源を使用するために待ってい
    るかを指示し;上記少なくとも1つのプロセッサが、さ
    らに、上記第1のスレッドが上記資源ロックを解放する
    のに応答して、上記資源を使用するために待っているス
    レッドが1つ少なくなったことを指示するよう上記値を
    更新するよう構成されている;請求項22記載のコンピ
    ュータシステム。
JP9010088A 1996-01-04 1997-01-06 マルチスレッド型プログラミング環境における共用資源への並行同時アクセスを自動的に管理する方法及びそのための装置 Pending JPH09198265A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/582661 1996-01-04
US08/582,661 US6598068B1 (en) 1996-01-04 1996-01-04 Method and apparatus for automatically managing concurrent access to a shared resource in a multi-threaded programming environment

Publications (1)

Publication Number Publication Date
JPH09198265A true JPH09198265A (ja) 1997-07-31

Family

ID=24329995

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9010088A Pending JPH09198265A (ja) 1996-01-04 1997-01-06 マルチスレッド型プログラミング環境における共用資源への並行同時アクセスを自動的に管理する方法及びそのための装置

Country Status (4)

Country Link
US (1) US6598068B1 (ja)
EP (1) EP0783152B1 (ja)
JP (1) JPH09198265A (ja)
DE (1) DE69636688T2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6883026B1 (en) 1998-08-31 2005-04-19 International Business Machines Corporation Method and apparatus for managing locks of objects and method and apparatus for unlocking objects
KR100902977B1 (ko) * 2006-05-06 2009-06-15 엔비디아 코포레이션 하드웨어 공유 시스템 및 방법
JP2011501323A (ja) * 2007-10-25 2011-01-06 マイクロソフト コーポレーション ルーチン内のスレッドを切り替える方法
JP2014197377A (ja) * 2013-03-04 2014-10-16 株式会社リコー 画像形成装置及び画像形成装置の制御方法
JP2015022626A (ja) * 2013-07-22 2015-02-02 富士通株式会社 処理順序制御装置、処理順序制御方法及び処理順序制御プログラム
US10248420B2 (en) 2017-04-05 2019-04-02 Cavium, Llc Managing lock and unlock operations using active spinning
US10331500B2 (en) * 2017-04-05 2019-06-25 Cavium, Llc Managing fairness for lock and unlock operations using operation prioritization

Families Citing this family (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2779595B1 (fr) * 1998-06-08 2000-07-21 Thomson Multimedia Sa Procede de gestion de priorites d'acces a des ressources dans un reseau domestique et appareil de mise en oeuvre
US7483967B2 (en) * 1999-09-01 2009-01-27 Ximeta Technology, Inc. Scalable server architecture based on asymmetric 3-way TCP
JP3575593B2 (ja) * 1999-12-27 2004-10-13 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクトのロック管理方法及び装置
CA2302959A1 (en) * 2000-03-23 2001-09-23 Ibm Canada Limited-Ibm Canada Limitee Priority resource allocation in programming environments
US7143410B1 (en) * 2000-03-31 2006-11-28 Intel Corporation Synchronization mechanism and method for synchronizing multiple threads with a single thread
US7487152B1 (en) * 2000-05-31 2009-02-03 International Business Machines Corporation Method for efficiently locking resources of a global data repository
GB2364143A (en) 2000-06-30 2002-01-16 Nokia Corp Resource allocation
CA2322613A1 (en) * 2000-10-06 2002-04-06 Ibm Canada Limited-Ibm Canada Limitee Latch mechanism for concurrent computing environments
US7792923B2 (en) 2000-10-13 2010-09-07 Zhe Khi Pak Disk system adapted to be directly attached to network
JP2005521115A (ja) * 2001-07-16 2005-07-14 ギュ キム、ハン ネットワークを介して入出力装置を動的に連結するための配置
GB0118294D0 (en) * 2001-07-27 2001-09-19 Ibm Method and system for deadlock detection and avoidance
US7543067B2 (en) * 2001-08-01 2009-06-02 Canon Kabushiki Kaisha Flexible secure network data transfer and messaging
US20050149682A1 (en) * 2001-10-09 2005-07-07 Han-Gyoo Kim Virtual multiple removable media jukebox
US7093262B2 (en) * 2002-07-30 2006-08-15 Intel Corporation Detecting deadlocks in multithreaded programs
US7209918B2 (en) * 2002-09-24 2007-04-24 Intel Corporation Methods and apparatus for locking objects in a multi-threaded environment
EP1422622A3 (en) * 2002-11-15 2007-07-11 Matsushita Electric Industrial Co., Ltd. Apparatus, method and program for contention arbitration
US20040142563A1 (en) * 2003-01-16 2004-07-22 Applied Materials, Inc. Methods and systems for exchanging messages in a controller for a substrate processing system
US7047337B2 (en) * 2003-04-24 2006-05-16 International Business Machines Corporation Concurrent access of shared resources utilizing tracking of request reception and completion order
US7457880B1 (en) * 2003-09-26 2008-11-25 Ximeta Technology, Inc. System using a single host to receive and redirect all file access commands for shared data storage device from other hosts on a network
US7380073B2 (en) * 2003-11-26 2008-05-27 Sas Institute Inc. Computer-implemented system and method for lock handling
US20050165938A1 (en) * 2003-12-24 2005-07-28 Linden Cornett Method, system, and program for managing shared resources
US20050198302A1 (en) * 2003-12-29 2005-09-08 Microsoft Corporation Multi-client support
US20050165748A1 (en) * 2004-01-15 2005-07-28 Seagate Technology Llc Method and apparatus for querying a computerized database
US7664836B2 (en) * 2004-02-17 2010-02-16 Zhe Khi Pak Device and method for booting an operation system for a computer from a passive directly attached network device
US20050193017A1 (en) * 2004-02-19 2005-09-01 Han-Gyoo Kim Portable multimedia player/recorder that accesses data contents from and writes to networked device
US20060069884A1 (en) * 2004-02-27 2006-03-30 Han-Gyoo Kim Universal network to device bridge chip that enables network directly attached device
GB2453284A (en) 2004-04-02 2009-04-01 Symbian Software Ltd Mechanism for notifying a kernel of a thread entering a critical section.
US7496918B1 (en) * 2004-06-01 2009-02-24 Sun Microsystems, Inc. System and methods for deadlock detection
US7746900B2 (en) * 2004-07-22 2010-06-29 Zhe Khi Pak Low-level communication layers and device employing same
US7698708B1 (en) * 2004-07-30 2010-04-13 Symantec Operating Corporation Method and system for persistent, recoverable user-level locks
US7860943B2 (en) * 2004-08-23 2010-12-28 Zhe Khi Pak Enhanced network direct attached storage controller
US20060067356A1 (en) * 2004-08-23 2006-03-30 Han-Gyoo Kim Method and apparatus for network direct attached storage
US7849257B1 (en) 2005-01-06 2010-12-07 Zhe Khi Pak Method and apparatus for storing and retrieving data
WO2006090403A2 (en) * 2005-02-23 2006-08-31 Hewlett-Packard Development Company, L.P. A method and system for managing a common resource in a computing system
US7603502B2 (en) * 2005-04-12 2009-10-13 Microsoft Corporation Resource accessing with locking
US8566298B1 (en) * 2005-07-28 2013-10-22 Symantec Operating Corporation Method and apparatus for sharing resource locks amongst applications
GB0516474D0 (en) * 2005-08-10 2005-09-14 Symbian Software Ltd Pre-emptible context switching in a computing device
US8065680B2 (en) * 2005-11-15 2011-11-22 Yahoo! Inc. Data gateway for jobs management based on a persistent job table and a server table
US8015152B2 (en) * 2006-01-24 2011-09-06 Microsoft Corporation Web based client/server notification engine
US9213586B2 (en) * 2009-03-18 2015-12-15 Sas Institute Inc. Computer-implemented systems for resource level locking without resource level locks
US9690625B2 (en) * 2009-06-16 2017-06-27 Oracle America, Inc. System and method for out-of-order resource allocation and deallocation in a threaded machine
US8572617B2 (en) 2009-07-21 2013-10-29 Sas Institute Inc. Processor-implemented systems and methods for event handling
US8589950B2 (en) * 2011-01-05 2013-11-19 Blackberry Limited Processing user input events in a web browser
US20120311605A1 (en) * 2011-05-31 2012-12-06 International Business Machines Corporation Processor core power management taking into account thread lock contention
CN102831007B (zh) * 2011-06-14 2017-04-12 中兴通讯股份有限公司 实时处理***中的共享资源访问方法和实时处理***
US8832690B1 (en) 2011-06-21 2014-09-09 Google Inc. Multi-threaded virtual machine processing on a web page
US9128786B2 (en) * 2011-11-22 2015-09-08 Futurewei Technologies, Inc. System and method for implementing shared locks between kernel and user space for synchronize access without using a system call to the kernel
US8966147B2 (en) 2012-08-22 2015-02-24 Wenguang Wang Lock leasing method for solving deadlock
US9400677B2 (en) * 2013-01-02 2016-07-26 Apple Inc. Adaptive handling of priority inversions using transactions
US9740513B2 (en) * 2014-06-05 2017-08-22 Futurewei Technologies, Inc. System and method for real time virtualization
GB2529899B (en) * 2014-09-08 2021-06-23 Advanced Risc Mach Ltd Shared Resources in a Data Processing Apparatus for Executing a Plurality of Threads
US10303514B2 (en) * 2014-11-14 2019-05-28 Cavium, Llc Sharing resources in a multi-context computing system
KR101591061B1 (ko) * 2014-12-30 2016-02-02 주식회사 코난테크놀로지 실시간 처리를 위한 전송 라이브러리 시스템 및 그 시스템에서의 송/수신 방법
US10761714B2 (en) * 2015-11-23 2020-09-01 Google Llc Recognizing gestures and updating display by coordinator
US11157332B2 (en) * 2016-07-06 2021-10-26 International Business Machines Corporation Determining when to release a lock from a first task holding the lock to grant to a second task waiting for the lock
CN108319496B (zh) * 2017-01-18 2022-03-04 阿里巴巴集团控股有限公司 资源访问方法、业务服务器、分布式***及存储介质
US11422716B2 (en) * 2020-04-08 2022-08-23 Samsung Electronics Co., Ltd. Systems and method for distributed read/write locking with network key values for storage devices
CN113742091A (zh) * 2021-08-31 2021-12-03 深圳Tcl新技术有限公司 一种线程运行方法、装置、计算机设备和存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4750116A (en) * 1985-10-11 1988-06-07 International Business Machines Corporation Hardware resource management
US5450592A (en) * 1992-09-02 1995-09-12 Data General Corporation Shared resource control using a deferred operations list
US5644768A (en) * 1994-12-09 1997-07-01 Borland International, Inc. Systems and methods for sharing resources in a multi-user environment
US5630136A (en) * 1995-06-09 1997-05-13 Sun Microsystems, Inc. Method and apparatus for serializing access to multithreading unsafe resources

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6883026B1 (en) 1998-08-31 2005-04-19 International Business Machines Corporation Method and apparatus for managing locks of objects and method and apparatus for unlocking objects
KR100902977B1 (ko) * 2006-05-06 2009-06-15 엔비디아 코포레이션 하드웨어 공유 시스템 및 방법
JP2011501323A (ja) * 2007-10-25 2011-01-06 マイクロソフト コーポレーション ルーチン内のスレッドを切り替える方法
US10007551B2 (en) 2007-10-25 2018-06-26 Microsoft Technology Licensing, Llc Techniques for switching threads within routines
JP2014197377A (ja) * 2013-03-04 2014-10-16 株式会社リコー 画像形成装置及び画像形成装置の制御方法
JP2015022626A (ja) * 2013-07-22 2015-02-02 富士通株式会社 処理順序制御装置、処理順序制御方法及び処理順序制御プログラム
US10248420B2 (en) 2017-04-05 2019-04-02 Cavium, Llc Managing lock and unlock operations using active spinning
US10331500B2 (en) * 2017-04-05 2019-06-25 Cavium, Llc Managing fairness for lock and unlock operations using operation prioritization
US10445096B2 (en) 2017-04-05 2019-10-15 Cavium, Llc Managing lock and unlock operations using traffic prioritization
US10599430B2 (en) 2017-04-05 2020-03-24 Cavium, Llc Managing lock and unlock operations using operation prediction

Also Published As

Publication number Publication date
DE69636688D1 (de) 2006-12-21
EP0783152A3 (en) 2000-05-17
DE69636688T2 (de) 2007-10-18
EP0783152B1 (en) 2006-11-08
EP0783152A2 (en) 1997-07-09
US6598068B1 (en) 2003-07-22

Similar Documents

Publication Publication Date Title
JPH09198265A (ja) マルチスレッド型プログラミング環境における共用資源への並行同時アクセスを自動的に管理する方法及びそのための装置
US5706515A (en) System and method for implementing an atomic wait for notification operation
US6732138B1 (en) Method and system for accessing system resources of a data processing system utilizing a kernel-only thread within a user process
US6910212B2 (en) System and method for improved complex storage locks
JP2866241B2 (ja) コンピュータシステムおよびスケジューリング方法
US5630136A (en) Method and apparatus for serializing access to multithreading unsafe resources
US6105049A (en) Resource lock/unlock capability in multithreaded computer environment
US6112222A (en) Method for resource lock/unlock capability in multithreaded computer environment
JPH07191944A (ja) 多重プロセッサによる多数の資源への命令におけるデッドロックを防止するためのシステムおよび方法
JPH1049381A (ja) 複数のデータ処理要求の処理方法及び処理システム、プログラムの実行方法及びシステム
EP0442717A2 (en) Control of peripherals in a multitasking system
JP2005284749A (ja) 並列処理コンピュータ
US8959517B2 (en) Cancellation mechanism for cancellable tasks including stolen task and descendent of stolen tasks from the cancellable taskgroup
US5291608A (en) Display adapter event handler with rendering context manager
JP2000330806A (ja) 計算機システム
US7275247B2 (en) Method and apparatus for handling threads in a data processing system
JP5970461B2 (ja) 仮想計算機制御装置、仮想計算機制御方法、仮想計算機制御プログラム、及び集積回路
US6105050A (en) System for resource lock/unlock capability in multithreaded computer environment
Baker et al. Real-Time Features for Ada 9X.
US9223637B1 (en) Method and apparatus to advise spin and yield decisions
JP2002014827A (ja) プロセスの制御及び可視化方法
JP3524187B2 (ja) 共有ウィンドウ操作権管理システムおよびその制御方法
JPH08297585A (ja) オペレーティングシステムによるデータ転送方法
EP0442714A2 (en) Interrupt handling in a data processing system
JP3547011B2 (ja) ウィンドウシステム環境において時間的に厳しいプロセスを実行する方法および装置