JPH02163835A - 待ち行列又はスタックから要素を除去する方法 - Google Patents

待ち行列又はスタックから要素を除去する方法

Info

Publication number
JPH02163835A
JPH02163835A JP1276178A JP27617889A JPH02163835A JP H02163835 A JPH02163835 A JP H02163835A JP 1276178 A JP1276178 A JP 1276178A JP 27617889 A JP27617889 A JP 27617889A JP H02163835 A JPH02163835 A JP H02163835A
Authority
JP
Japan
Prior art keywords
operand
queue
block
value
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP1276178A
Other languages
English (en)
Other versions
JPH0642204B2 (ja
Inventor
Michael E Arnold
マイケル・エドワード・アーノルド
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH02163835A publication Critical patent/JPH02163835A/ja
Publication of JPH0642204B2 publication Critical patent/JPH0642204B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 A、産業上の利用分野 この発明は多重プロセッシング・ユニットないし多重プ
ログラム・コンピュータ・システムにおける時系列リス
トの操作に関し、より具体的には、多重プロセッシング
・ユニットが非同期でリストをアクセスするときでもロ
ック機構なしで項目の付加または削除を行えるようにし
たものである。
またこの発明はリスト操作を実行するための新規なコン
ピュータ命令にも関連する。
B、従来の技術 この発明は待ち行列およびスタックの双方を扱う。FI
FO(ファースト・イン・ファースト・アウト)リスト
とも呼ばれる待ち行列においては、最初にリストに付加
された項目が最初に除去される。LIFO(ラスト・イ
ン・ラスト・アウト)リストとも呼ばれるスタックにお
いては最後にリストに付加された項目が最初に除去され
る。オペレーション・システムやサブ・システム環境に
おいて非同期のFrFOおよびLIFOリストの操作は
非常に一般的である。このような環境下で時系列リスト
をす・ばやくかつ簡易に操作できないと、多大な制約と
なってしまり。緊密結合構成において用いられるプロセ
ッサの個数が増大し続けているので、ソフトウェアによ
シシリアル化のコストも増大していく。時系列リストは
頻繁に用いられるので、このコストはたえがたいものに
なりつつある。
現在F I F O!Jコスト管理手法としては2つの
ものがある。単ヘッド待ち行列に対しては、リストはア
ンカ点を有するものとして定義され、すべてのエレメン
トはこのアンカ点を用いて付加され、またリストをサー
チ・ダウンして最後のエレメントを除去してすべてのエ
レメントが削除されていく。この手法では多重付加が可
能となるが一方単一削除しか実現できない。またこの手
法では削除サーチをリストの終りまで行う必要があり、
削除がページ・フォールトによって割り込まれることが
ある、ページ・フォールトを復旧することは可能だけれ
ど、これにともなうオーバーヘッドはリストが長くなる
と過大なものとなる。
二重ヘッド待ち行列に対しては、リストは2つのアンカ
点を有するものとして定義され、すべてのエレメントは
一方のアンカ点を用いて付加され、他方のアンカ点を用
いて削除される。この手法では一時に1つの付加または
削除しかりストにアクセスできない。単一アクセスしか
一時に許されないということを保障するため、何らかの
実現方法(ロック機構)を採用しなければなら々い。
最初の手法は、過剰なベージングが予想されるので実際
的でない。第2の手法はロック機構を必要とするという
制約の点から効率の劣化が予想される。
L I F O1,1ストをモニタする最も一般的な手
法はスタック中に1つのアンカ点をセットし、とのアン
カ点を利用してすべてのエレメントを付加(ブツシュ)
および削除(ポツプ)するというものである。IBM 
 System/370  ExtendedArch
itecture Pr1ntiples  of O
peration(IBM  出版物番号5A22−7
085−0、以下では文献370XAと呼ぶ)の第A4
5頁には多重非同期ロックなしの付加および削除を実現
する例が示されている。これは表1と同一である。
このリストは標準的なS/370プログラム・セグメン
トを含み、これは当業者に周知である。第1列は二−モ
ニツク・ラベルを列挙し、第2列はオペレーションない
しインストラクション・フィールドであり、第6列はオ
ペランド・フィールドを列挙し、第4列はコメント欄で
ある。これは当業者に周知の標準的なフォーマットであ
る。
1L二+((剃狡鮭上 フリー・リストへの付加ルーチン 初期状態: GR2は付加されるエレメントのアドレスを含む。
GR4けヘッダのアドレスを含む。
1、ADDQ     LM     Oll、0(4
)2、  TRYAGN   ST     010(
2)ろ、                     
   LR3、14、BCTR3,0 5、CDS    O12,0(4) 6、           BC7TRYAGNフリー
・リストからの削除ルーチン Z DELETEQ  LM    2.3.0(4)
8、TRYAGN   LTR2,2 9、BC8、EMPTY l[]、         L     D、0(2)
11、          LR1,512゜    
    CDS   2.0.0(4)13、    
     BC7TRYAGN14、USE     
 (任意のインストラクション)GROlGRlをヘッ
ダの内容と等しくする。
新エレメントをリストのトップにポイントする。
カウントをGR3に移動する。
カウントを減分する。
ヘッダを更新する。
GR2、GR3をヘッダの内容と等しくする。
リストは空か? インスならヘルプとする。
/−なII)GROを第1エレメントからのポインタと
等しくする。
カウントをGRIに移動する。
ヘッダを更新する。
ヘッダを更新する。
第1の例は10番目および11番目のDELETEQの
インストラクション間の割り込みに対する問題しか解消
しない。7番目および10番目のインストラクションの
間の割シ込みに対する問題は解消しない。もしDELE
TEQが7番目および10番目のインストラクションの
間で割り込みを受けると、リストの第1番目のエレメン
トが待行列から解除され自由になり、10番目のインス
トラクションが無効アドレスのためにプログラム・チエ
ツクにぶつかる。
他の例としては米国特許第4394727号明細書およ
び米国特許第4320455号明細書およびI BM 
 Technical  DisclosureBut
letin、Vol、24、pp2716〜2723.
1981年11月がある。これらはロック・ピットやロ
ック・ワードを用いている。
多重プロセッシングないし多重プログラム・コンピユー
テイング1システムにおいて所定の場合にロック機構を
用いないですませる1つの手法が、米国特許第3886
525号明細書に記載されている。
米国特許第5886525号明細書の手法は[比較およ
びスワップJ (Compare  and Swap
)という新しいインストラクションを含んでいた。
このインストラクションを用いることにより、共有デー
タの各ユーザは共有データ記憶におけるアドレス可能位
置でその共有データをアクセスすること許され、プログ
ラム・インストラクション・シーケンスによってさらに
処理を行える。処理ののち、処理されたデータは共有デ
ータ記憶におけるアドレス位置に戻される。[比較およ
びスワップ」を用いると、インストラクションによりア
クセスされたアドレス位置のデータ内容が、処理前アド
レス位置からアクセスされたデータと比較される。この
比較の結果、共有データの処理の間に他のユーザが共有
データをアクセスして処理し、値の異なった共有データ
をアドレス記憶位置に戻したか否かを判別できる。C8
(比較およびスワップ)インストラクションに応じて、
アドレス位置の値が他のユーザによって修正されたこと
が判明すると、修正値はそのユーザによって保持され、
処理がその修正値について再起動させられる。CSイン
ストラクションによってアクセスされたアドレス位置の
データ値が処理前にそのユーザによってアクセスされた
データの値と同じであれば、他のユーザが共有データに
アクセスし、修正シていることがないと判明する。した
がって処理データはアドレス位置に転送され、後続の処
理が許される(米国特許第3886525号明細書第2
欄8〜39行)。
COMPARE  AND  5WAP(C8)インス
トラクションおよびその変形COMPAREDOUBL
E  AND  5WAP(CDS)インストラクショ
ンは現在マルチ・プログラミングおよびマルチ・グロセ
ツシング環境で用いられカウンタ、フラグ、コントロー
ル・ワードおよび他の共通記憶領域のアクセスをシリア
ル化している。
文献370XAはC8およびCDSインストラクション
の使用例を示している。多分最も留意すべき点は、機能
が割り込み用に実行可能とされるプログラムによって実
現され(マルチ・プログラミング)、またマルチ・プロ
セッシング構成で実行されるプロ・ダラムによって実現
されるという点である。換言すれば、インストラクショ
ンC8およびCDSにより、プログラムが、実行可能時
に記憶位置の内容を修正できる。これはルーチンが、た
とえ同一のCPUにはりついている他のプログラム(そ
の記憶位置を修正する)により割り込まれ得る場合も同
じである。また他のCPUが同時に同じ記憶位置を更新
する可能性がある場合ですら同じである。
CSインストラクションは記憶位置の値をまずチエツク
し、こののち、この値がプログラムの予期したものと同
じである場合のみこの値を修正する。通常はこの値が先
にフェッチした値と同じである。記憶部内の値がプログ
ラムの予期したものと異なるならば、その位置では修正
が行われず、かわりにその位置の現行の値が汎用レジス
タに転送さ、れて、プログラムがループ・バックして再
試行できるようにされる。CSインストラクションの実
行の間、他のCPUはその特定の位置にアクセスできな
い。
ダブル・ワードより大きな共通記憶領域を更新すべきと
きには、特別のインターロックを行って、単一のプログ
ラムのみか一時に共通領域を更新するのを確実にする必
要がある。このような領域はシリアルに再利用可能なリ
ソース(シリアル・リューザル・リソース% 5RR)
と呼ぶ。一般にリストの更新、またはリストの走査でさ
え、リストのロックなしに安全に行うことはできない。
しかしながら、CSインストラクションは所定の制限的
な場合において、ロック/アンロック機能を実現し、競
合を解消するに足る十分の待行列を提供する。LIOの
態様でもF’IF’Oの態様でもそうである。ロック/
アンロック機能は任意の複合構成のSRHの更新用のイ
ンターロック機構として用いることができる。
ロック/アンロック機能はSRRに関連した「ヘッダ」
を用いる点に基礎を置く。ヘッダはSRRの状態を決定
する共通開始点であり(フリーのときも使用中のときも
)、また競合時に要求を待ち行列処理するにも用いられ
る。競合はWAITおよびPO8Tを用いて解消される
、一般的プログラミング手法では、SRHのロックに遭
遇したプログラムが[壁にマークを付ける」必要があり
、これでそのプログラムがウェイトしているECUのア
ドレスを表示する。「アンロック嬢プログラム」はこの
マークを見てECBをポスト(PO8T)する。これに
よってウェイト・プログラムの継続が許容される。多く
の場合、個々のSRRを用いるすべてのプログラムはL
FFO待ち行列スキームまたはFIFOスキームを用い
なければならず、2つは定まっていない。より複雑な待
ち行列が必要なときには5文献370XAにおいて、S
RR用の待ち行列を2つの方法のいずれかでゾロツクす
ることが提案されている。
指摘したように、C8およびCDSインストラクション
は極めてうまく用いられてきた。これらインストラクシ
ョンによってユーザは共有データへのアクセスないし、
後続の処理のためのヘッダを得ることができる。他のユ
ーザがデータをアクセスしているときにアドレス位置へ
のアクセスを禁止する要請はCSインストラクションに
よって解消された。しかしながらC8およびCDSイン
ストラクションは単一ワードないしダブル・ワードにし
か適用できない。
これに対し、後述するとおり、この発明のCOMPAR
E  AND  5WAP  DISJOINT(C8
D)インストラクションおよびCOMPARE  AN
D  LOAD(CAL)インストラクションによれば
2つの隣接していないワード(または拡張板ではダブル
・ワード)を参照することができる。
C9発明が解決しようとする課題 この発明の目的は、マルチ・プロセッシング・ユニット
ないしユーザがリストにアンロック状態で非同期にアク
セスできるようにすることである。
またこの発明の他の目的はリストの一貫性を維持しなが
ら上述の動作を保障することである。
またこの発明の他の目的はそのようなリストの維持を効
率良く行えるようにすることである。
またこの発明のさらに他の目的は上述の目的を実現でき
るコンピュータ・インストラクションを提供することで
ある。
08課題を解決するだめの手段 この発明では以上の目的を達成するために、新たなコン
ピュータ・インストラクションすなわち「COMPAR
E  AND  5WAP  DISJOINTJおよ
び[cOMPARE  AND  LOADJを生成す
る新しい手順を採用する。このようなメモリ・アクセス
・シリアル化インストラクションを用いることにより、
任意の個数の付加および削除がこれらリストを無制約に
非同期に操作を行える。またこの発明では多重プロセッ
サが、リストの一貫性を維持したままでFIFOまたは
LIFO型の時系列リストのエレメントの付加や削除を
行える。用語「D I S JOI NTJ(解体)は
処理されている2つのワードが記憶領域で隣シ合ってい
ないことを意味する。1−I)fsJOINT」の同義
語は[DISCONTIGUOUSJである。
新たなCOMPARE  AND  LOAD(CAL
)インストラクションは第2レジスタのデータをアドレ
ス位置と比較し、比較結果が一致であれば第2位置から
の値を第2レジスタにフェッチする。このインストラク
ションの利点は、1の位置の内容が変わっていないこと
に応じて他の位置の値をフェッチできるという点である
新たなCOMPARE  AND  5WAP  DI
SJOINT(CSD)によれば、COMPARE  
AND  5WAP(C8)インストラクションやCO
MPARB  DOIJBLE  ANDSWAP(C
DS)インストラクションと違って、プログラムが2つ
の隣り合っていないワードやダブル・ワードを参照でき
る。すなわち2つの隣接していない記憶位置を同時に更
新させることができる。多くの実際的な場合では2つの
隣接しないエンティティを扱う必要があるので、これは
実益がある。
E、実施例 まず2つの新しいインストラクションCOMPARE 
 AND  LOAD%COMPARE  AND  
5WAP  DISJOINTおよびその操作について
説明する。インストラクションは文献370XAのフォ
ーマットを用いて記載するが、その方法はより多くのア
プリケーションを有する。
COMPARE  AND  LOAD(CAL)R1
、D2(B2)、R3、D4(B4)0   8   
12  1S   20  32  3647先の説明
は第1図およびCALフォーマントとの関連で示される
COMPARE  AND  LOADインストラクシ
ョンによって特定されるアドレス可能データはつぎのと
おりである。
2値ビット0−7のオペレーション・コードはデコード
されてCOMPARE  AND  LOADインスト
ラクションであることを示す。4つの異なるオペランド
はインストラクションの残りの部分のアドレス情報によ
り特定される。5つの2値ピノ)8−1j(R1によっ
て表示)はオペランド1を含む汎用レジスタを特定する
。2値ビット12−15(R3によって表示)は処理さ
れたデータまたはオペランド3を含む汎用レジスタを特
定する。2値ピツ)16−19(B2によって表示)は
、所定のベース・アドレス情報を含む汎用レジスタを特
定する。インストラクションのピッ)20−21(B2
によって表示)をこのベース・アドレス情報に付加して
共有記憶のアドレス位置を特定する。2値ビット32−
35(B4によって表示)も所定のベース・アドレス情
報を含む汎用レジスタを特定する。ビット36−47(
B4によって表示)をこのベース・アドレス情報に付加
して共有記憶のアドレス位置を特定する。
第1図のブロック30において、COMPAREVAL
UEはオペランド1(R1)、COMPARE LOC
ATIONはオペランド2(B2(B2))、FETC
HVALUEはオペランド3 (R3)そしてFETC
HLOCATIONはオペランド4(B4(B4))で
ある。待ち行列操作と関連して検討するように、2つの
不連続ないし非隣接のエレメントはたとえばリストのヘ
ッドおよびリスト中の他のエレメントである。
記憶領域の第2オペランド位置のフル・ワードD2(B
2)は第1図のブロック32に示すようにR1の第1オ
ペランドと比較される。両者が等しければ、プログラム
が第3オペランドすなわち記憶領域中の第4オペランド
D4(B4)によって定められる位置のフル・ワードを
レジスタ中へとフェッチする。これはブロック34に示
すようにベース/ディスプレースメントとして行う。ブ
ロック40に示すように条件コードCCはゼロに設定さ
れる。
判別ブロック62では、第2オペランド位置のフル・ワ
ードが第1オペランドと等しくなければ。
第1オペランドは第2オペランドと等しくされ、第3オ
ペランドは不変とする。ブロック5乙に示すとおりであ
る。第4オペランドは使用されず、条件コード(CC)
は1に設定される。ブロック38に示すとおりである。
R1およびR3は各々任意の一般レジスタ手段を表わす
。第2および第4オペランドはワード境界で指定された
記憶領域中のフル・ワードである。
第2オペランドが第1オペランドに等しくないなら、ア
クセス例外処理は第4オペランドに対しては認識されな
い(換言すれば第4オペランドに対して参照がなされな
い)。
記憶領域の第2オペランドD2(B2)がR1中の第1
オペランドと等しいとき、他のCUPは第2オペランド
がフェッチされてから第4オペランドがフェッチされる
までの間第2オペランドにアクセスすることができない
。この種のステップを通常記憶アクセス・シリアル化と
呼ぶ。
各オペランドに関するシリアル化はステップ62におい
て、値が当該位置からフェッチされる前および処理が完
了したのちに実行される。CPUの操作は当該CPUの
先行する記憶アクセスが終了しくチャネルや他のCPU
が監視する)、さらに第2オペランドがフェッチされる
まで遅延される。第1オペランドと第2オペランドとの
比較結果が等しいというものであれば、第4オペランド
(B4)84がフェッチされる。当該CPUは後続のイ
ンストラクションやそのオペランドを、CALインスト
ラクションの実行が完了するまでアクセスしない。
条件コード(CC)結果: 0 = 第1および第2オペランドが等しく、第6オペ
ランドを第4オペランドで交換した。
1 :第1および第2オペランドが等しくない。
第1オペランドを第2オペランドで交換した。第3およ
び第4オペランドは不変。
2 : 1・ 3  :  1 舎 プログラム例外処理 アクセス(オペランド2および4をフェッチして記憶) オペレーション COMPARE  AND  5WAP  DISJO
INT(C8D)CSOR1、B2(B2)、R3、B
4(B4)第2図において、C8D処理は全般的にブロ
ック50で開始され、第1および第2オペランドを比較
し、つぎに所定の条件下で第3および第4オペランドを
比較する。第1オペランドR1および記憶領域の第2オ
ペランドD2(B2)は判別ブロック52において比較
される。これらが等しければR3中の第3オペランドお
よび記憶領域の第4オペランドD4(B4)が判別ブロ
ック58において比較される。さらにこれらが等しけれ
ば、R1+1オペランド(Replace  Valu
e  1)が第2オペランド位置(Location 
 1)にストアされ、R3+1オペランド(Rapla
ce Value2)が第4オペランド位置にストアさ
れる。これはブロック64に示すとおりである。条件コ
ードCCはブロック66に示すようにゼロに設定される
第1オペランドR1および第2オペランドD2(B2)
が等しくなければ、ブロック54において第2オペラン
ドを第1オペランドに転送する。
第1および第2オペランドが等しく、かつ第6および第
4オペランドが等しくなければ(ブロック58)、ブロ
ック60に示すように第4オペランドが等6オベランド
に転送される。条件コードCCはブロック62に示すよ
うに2に設定される。
R1およびR3は各々一般レジスタの奇偶ベアを表わし
、偶数番のレジスタを指示する。R1+1およびR3+
1はベアの奇数番のレジスタを表わす。第2オペランド
D2 (B 2 )および第4オペランドD4(B4)
は記憶領域のワードである。
第1および第2オペランドが等しくないという比較結果
の場合、第2オペランドは不変であり、第4オペランド
はアクセスされない。第3および第4オペランドが等し
くないという比較結果の場合、第2および第4オペラン
ドは不変である。第1および第2オペランドが等しくな
いなら、第4オペランドに対するアクセス例外処理は認
識されない。
ブロック52および58での双方の比較結果が等しいこ
とを示すときには、他のCPUが第2オペランド位置ま
たは第4オペランド位置にアクセスするが、対応するオ
ペランドが比較用にフェッチされてから、記憶されるま
での間、許されない。
各オペランド位置に関するシリアル化は各オペランドが
ブロック52および58でフェッチされるまえに実行さ
れ、またブロック68で処理が終了したのち再び実行さ
れる。CPHの記憶領域への先行するアクセスがすべて
完了しくチャネルや他のCPUが監視する)、第2オペ
ランドがフェッチされるまで(ブロック52)、CUP
操作が遅延される。第1および第2オペランドが等しけ
れば、第4オペランドがフェッチされる(ブロック58
)。CDSインストラクションの実行が完了するまでC
PUは後続のインストラクションやそのオペランドをア
クセスしない。結果としての値があったとしてもそれを
供給するのも同じである(これはチャネルや他のCPU
に監視される。
第2および第4オペランドはワード境界に指示されてい
る。R1およびR3フィールドは偶数レジスタを指示す
る。そうでなければ指定例外を認識する。
CCa果: 0 : 第1および第2オペランドが等しく、かつ第3
および第4オペランドが等しい。第2および第4オペラ
ンドが置き換えられている。
1 : 第1および第2オペランドは等しくない。
第1オペランドは第2オペランドで置き換えられている
。第3および第4オペランドは不変。
2 : 第1および第2オペランドは等しいが、第3お
よび第4オペランドは等しくない。第3オペランドは第
4オペランドで置き換えられている。第1および第2オ
ペランドは不変。
3  :  ・ ・ ・ プログラム例外処理 アクセス(オペランド2および4をフェッチして配憶) 指定(5pecification) オペレーション さてつぎに以上のインストラクションを用いてどのよう
に時系列リストないし待ち行列を操作するかについて説
明する。待ち行列はヘッド・ポインタおよびテイル・ポ
インタを有するものとして定義される、エレメントは待
ち行列のテイルに付加され、ヘッドから取シ出される。
第5図は二重ヘッド待ち行列からエレメントを取り出す
場合を示す。既述のとおり、待ち行列はQ  T(FA
DおよびQ  TAILを有する。ここでQ  HEA
Dは待ち行列中の最も新しい要素をポイントし、QTA
ILは待ち行列中の最も古い要素をポイントする。実線
は操作前のリストを示す。図示の待チ行列でエレメント
がA、B%Cの順で付加され、Aが削除されるとすると
、QHEADポインタは破線で示すようにニレメン)B
をポイントしなければならない。
この発明の方法は第4A図および第4B図ならびに表H
のインストラクションの一部で示され、これは待ち行列
解除に関する。
待ち行列はヘッドおよびティル・ボイ/りを有するもの
として定義されている。エレメントは待ち行列のテイル
に付加され、ヘッドから取り出される。
この発明によれば、何ら修正を加えることなく、Q  
HEADのポインタの置き換えおよびニレメン)Aの次
のポインタの置き換えが可能になる。
この結果、リストの操作の間にリストの一貫性が保持さ
れる。
リスト操作 つぎに、多重プロセスがエレメントを同時に待ち行列解
除および待ち行列挿入でき、しかもイベント制御ブロッ
ク(ECB)でロックしたり待ち状態をとったシする必
要がなく、゛さらに待ち行列が改ざんされないことを保
障することについて説明しよう。これはCALおよびC
8Dインストラクシヨンをプログラムに挿入することに
よって達成される。
待ち行列はヘッドおよびティル・ポインタを有するもの
として定義される。エレメントは待ち行列のテイルに付
加され、ヘッドから取り出される。
機能的に定義は第6図および第4図の二重ヘッド待ち行
列と同じである。以下のインストラクションの説明につ
いては文献370XAを参照されたい。列の説明はすで
に表1について行った。
表 以下の宣言を仮定する QUEVE    DS QHEAD    DC QTA I L    DC * ELEMENT NEXT     DS ELEMENTL  EQU * NEWELF:M   DS 5ECT F A(0) A(0) *−ELEMENT CL(ELEMENTL) 待チ行列のヘッドへのポインタ 待ち行列のテイルへのポインタ 待ち行列エレメント 待ち行列のつぎのエレメントへのポインタ待ち行列に挿
入する新エレメント 表  2 (続) 1゜ 2゜ QUEUEからのエレメントの解除(第4図参照)DE
QUEUE   L     R2,QHEADDEQ
I     LTRR2,R2 BZ    DEQEXrT Z 18、  DEQEXIT C TR NZ LR LR DS C LR・ LR C C DS 4、DEQI R4,R4 EQ5 R5,R4 R3,R2 R2,R4,QUEUE 4、DEQl DEQEXIT Ft5.  R4 R5,R5 4、DEQl 2、DEQ2 H ヘッドへのポインタを得る 何かあるか?(転送かつテスト) ノー、そのまま QHEADを次のエレメントにセット QHEAD変化で、再試行 最初のエレメントが唯一のエレメントカマノー、C8D
で待ち行列解除 イエス、R5=14二〇 テイルはヘッド・ポインタと等しくなければならない待
ち行列ポインタをゼロに置き換える 失敗したら、再試行 成功したら、それを表示して終了 NEXTフィールドを用いてQHEADを置き換えるN
EXTフィールドをゼロに置き換えるインクを更新する R2=NEXT、再試行 R4=NEXT  再試行 待ち行列解除なら、R2=ELEMENTそうでないな
らR2−0表  2 (続) QUEUF:へのニレメン ENQUE    LA ENQ I     LM TR NZ LR DS C ENQ2     LR LR LR トの挿入(第6図参照) R5,NEWELEM R2,R5,QUEUE R2、R2 ENQ 2 R4%R5 R2,R4、QUEUE 4、ENQI ENQ EX I T R2,R3 R3,R5 R4,R4 13゜ NZ ENQ 1 14   ENQEXIT    DSH 新エレメントのアドレス金得る QHEADおよびQTAILポインタ全得るQUEUE
に何かあるか イエス、通常の待ち行列挿入 ノー、QHEADおよびQTAILは新ニレメン)fポ
イントすべきポインタを更新 失敗したら、再試行 成功したら、終了 QUEUEのテイルのポインタ 新エレメントのポインタ 現行テイルのエレメントがゼロの次ポインタヲ有するポ
インタを更新 失敗したら再試行 第4A図において、プログラムDEQUEUEは二重ヘ
ッドF’IFOリストからこの発明にしたがってエレメ
ントを除去する。プログラムの第1のステップはブロッ
ク231に示すように、転送すべきものがあれば自動的
にエレメントをQHEADおよびQ  TAILに転送
することである。
プログラムはブロック232に進んで待ち行列が空かど
うかを判別する。答えがイエスであればブロック233
に示すようにDEQUEUEプログラムを終了する。答
えがノーであれば、CoMPARE  AND  LO
ADルーチンをブロック234で用いて最も い作業エ
レメントからっぎのポインタの値をフェッチする。この
間Q  HEADが変わらないようにする。
プロセスのつぎのステップはブロック235においてQ
  HEADポインタが変わったがどうがを判別するこ
とである。答えがイエスであれば、ルーチンは判別ブロ
ック232に戻ってっぎのエレメントの待ち行列解除を
試みる。
CALを用いて、QHEADによってアドレスされるチ
エインの第1のエレメントからつぎのポインタの値をフ
ェッチする。この操作は、同じCALや待ち行列解除操
作を実行する他のプロセスによってエレメントが除去さ
れていないことを保障しながら実行される。Q  )(
EADが変化したことが判別されると(これは何かがリ
ストからエレメントを除去したことを示す〕、上述の次
検索位置をプログラムが再フエツチしなければならない
。実際Q  HEADが変化しなかったなら、プログラ
ムは有効な次ポインタ位置を保持している。
処理のつぎのステップはブロック234によってフェッ
チされたつぎのポインタをフェッチすることである。つ
ぎのポインタがゼロでなかったら、1個以上のエレメン
トが存在しくブロック236)、プログラムはQ  H
EAD用のリプレースメント値をブロック234でフェ
ッチしたつぎのポインタに設定する。ブロック237に
おいてプログラムはQ  TAIL値をQ  HEAD
と等しい値に設定する。Q  HEADおよびQ  T
AILが変化しないようにしながら(自動的に)、Q 
 HEADおよびQ  TAILをゼロに置き換える。
他方Q  HEADまたはQ  TAILが変化したな
ら、プログラムはブロック232に戻り、QHEADを
再びテストする。Q  HEADおよびQ  TAIL
が変化しなかったなら、プログラムはゼロまたは待ち行
列解除したエレメントのアドレスを伴って終了する(ブ
ロック243)。
第4B図のブロック240では、Q  HEADおよび
次のフィールドが変化しないことを確かめながら、プロ
グラムがQ 、HEADの値を待ち行列中の2番目に古
いエレメントと交換し、つぎのポインタの値をゼロに設
定する。図に示すように、これはCOMPARE  A
ND  5WAP  DrSJOINT(C8D)イン
ストラクションによって行う。判別ブロック241にお
いて、Q  HEADポインタが変化したかどうかが判
別される。
ポインタが変化していればプログラムは判別ブロック2
32に戻って待ち行列が空かどうかの判別を行う。QH
EADポインタが変わっていなければプログラムは判別
ブロック242に進む。待ち行列解除ルーチンはブロッ
ク243で終了する。
このように終了して、ゼロまたは待ち行列解除エレメン
トのアドレスを得る。
判別ブロック236において、待ち行列中にそれまでに
たった1つのエレメントしかな(、かつ転送時からQ 
 HEADおよびQ  TAILが変化していないなら
、両者をゼロにセットする。プログラムはつぎに判別ブ
ロック238に進みQ)IEADおよびQ  TAIL
が変化したかどうかを判別する。Q  HEADおよび
Q  TAILが変化していればプロセスはステップ2
32に戻り待ち行列が空かと5か判別する。しかしQ 
 HEADおよびQ  TAILが変化していないなら
、プログラムは終了して待ち行列解除されたエレメント
のアドレスを生じる。
C8Dを用いると、DEQUEUEプログラムは、Q 
 HEADの値とチエインの第1のエレメントのつぎの
ポインタ位置の値とを、両者の値が変化しないことを確
かめながら交換する。つぎにC8Dは、QHEADおよ
びつぎのポインタが変化しないことを確かめながら、こ
れらの値をチエインの第2のエレメントのアドレスおよ
びゼロとそれぞれ交換する。
Q  HEADポインタが変化したか、またはつぎのポ
インタが変化したなら、これは、他のエレメントがチエ
インに付加されたか、あるいは、CALおよびC8Dの
間に他の何者かが待ち行列からエレメントを除去したこ
とを示す。この時点で、プログラムは先に示したよ5に
CALインストラクションを再実行する。ポインタがい
ずれも変わらなかったなら、待ち行列の第1のエレメン
トが除去されて処理が成功する。
第5図は二重ヘッド待ち行列へのエレメントの付加を示
す。待ち行列はQ  HEADおよびQ−TAILを有
するものとして定義される。ここでQ  HEADは待
ち行列中の最も古いエレメントをポイントし、Q  T
AILは待ち行列中の最も新しいエレメントをポイント
する。図示の待ち行列においてA1 B、Cの順でエレ
メントが付加されるとすると、Q  TAILポインタ
はエレメントNをポイントするよう変わらなければなら
ず、またエレメントCからのポインタ(Cの次のポイン
タ)もニレメン)Nをポイントするように変わらなけれ
ばならない。
第6図はこの発明の待ち行列挿入を示すフローチャート
である。この場合の事例は第5図に示すように二重ヘッ
ドFIFOリストにエレメントを付加するというもので
ある。第6図のフローチャートに関連するインストラク
ションの詳細なセットは表2の第2の部分に示しである
ブロック100に示すように、QHEADおよびQ  
TAILポインタは自動的にフェッチされる。判別ブロ
ック102ではQ  HEADをテストして待ち行列が
空かどうかを判別する。待ち行列が空でないならばプロ
グラムはブロック106に進み、新しいエレメントが非
空のリストに付加される。Q  TAI・しのアドレス
および新エレメントのアドレスが確立される。何らかの
レジスタ手段を用いて最後のエレメントが待ち行列中に
に最後のエレメントとしてとどまっているかどうかを確
かめる。プログラムはつぎに判別ブロック108に進み
、ここでQ  TAILまたはつぎのポインタが変化し
ているかどうかを判別する。両者が変化していなければ
、プログラムは待ち行列挿入ルーチンから出る。Q  
TAILまたはつぎのポインタが変化しているならば、
プログラムはブロック100に戻り、その時点で再び開
始する。
Q  TAILもつぎのポインタも変わっていないなら
、待ち行列に新エレメントが成功裡に付加されたことで
あり、プログラムはブロック112に示すように待ち行
列挿入から出る。
ブロック108の判別結果が、Q  TAILまたハ最
後のエレメントのつぎのポインタがフェッチ以後に変化
していることを示すなら、プロセスはブロック100で
再び開始されなければならない。答えがノーであれば、
待ち行列挿入処理は終了してプログラムはブロック11
2で終わる。
ブロック102において、待ち行列が空であれば、プロ
グラムはブロック104に進む。新エレメントを付加し
、QHEADおよびQ  TAILポインタの双方が新
エレメントをポイントする(ブロック104)。フロー
チャートに示すように自動的に実行される。
ブロック110において、QHBADおよびQ  TA
ILが、新エレメントをポイントしたあとで、変化した
かどうかを判別する。判別ブロック110で示すように
それらが変化していないならプログラムは待ち行列挿入
ルーチンから出る。
Q  TAILまたは最後のエレメントのつぎのポイン
タが変化しているなら、プログラムはブロック100に
戻り、手続を再開する。
繰り返していえば、ブロック106f′i、C5D(ン
ストラクションを表わす。Q  TAILがエレメント
Cをポイントする間、C8Dインストラクシヨンがレジ
スターオペランド1をQfitオペランド5と比較する
ことが保障される。両者が等しければプログラムは位置
オペランド3の値をレジスターオペランド2の値で置き
換える。両者が等しくなければ、レジスタ・オペランド
1は位置オペランド3の値を取って条件コードを設定す
る。
C8DインストラクシヨンがC8やその改良版であるC
OMPARE  DOUBLE  ANDSWAPイン
ストラクションとどこが違うか留意されたい。C8およ
びCDSは1つの位置を比較して置き換える。1つの位
置のフル・ワードないしダブル鹸ワードについてである
。C8Dおよびその変種のCD5Dは条件付きで2つの
隣り合わないエレメントを置き換える。2つの位置のフ
ルーワードないしダブル・ワードについてである。
CSはたった1つの記憶位置を比較してそれを条件付き
で置き換えるが、C8Dは1つの位置を比較し、最初の
位置の比較結果が一致であることを条件に第2の位置を
比較する。2つの比較がともに一致であれば、双方の位
置を置き換える。これによって、待ち行列またはスタッ
クおよびリストの最初のエレメントの双方を同時に操作
でき、しかもリストの一貫性を維持できる(リストの一
貫性がないとはたとえばエレメントが損失してしまうと
いうことである)。
スタック(LIFOリスト)のリスト操作第7図はスタ
ックからのエレメントの除去を示す。この場合処理はエ
レメント人をスタックから除去する。
スタックはTo 5(TOP of 5tack po
inter)を有するものとして定義される。
To8に示されるスタックおよびエレメントA1B>よ
びC(C,B、Aの順でスタックにブツシュされる)を
考えると、スタックから第1のエレメントを除去(ない
しポツプ)するにはスタックのトップの値をBすなわち
スタックの第2のエレメントのアドレスで置き換えてA
のアドレスの値を戻す必要がある。
この発明では、エレメントに対して多重プロセスが同時
にポツプ(スタックからの除去)処理を行うようにでき
、そのためにと(にロックを保持するとかECBを待つ
とかがなく、またスタックがこわれてしまうおそれもな
い。この手法は表1および第8図に示す。
表   3 つぎの宣言を仮定する 5TACK    DS TO3DC * ELEMENT   DSECT NEXT     DS ELEMENTL  EQU * NEWELEM    DS F A(0) *−ELEMENT CL(ELEMENTL) スタックのトップへのポインタ スタック番エレメント スタックのつぎのエレメントへのポインタエレメントの
長さ スタックに付加する新エレメント k 3(続) スタックからのエレメントのポツプ(第8図参照)PO
P      L     R2、TO8POPI  
   LTRR2、R2 BZ       POPEXIT op2 POPEXIT C R LR 4、POPI R3、R4 R5,R5 4、POPl 2、POP2 POP H TO8を得る エレメントあるか? ノー、出 R2←TO8,R4−つぎのTO8 TO8変化で、再試行 ツキのエレメントへのポインタ つぎのTO8がゼロ ポインタの更新 R2=TO8,再試行 R4=NEXT、再試行 失敗したら再試行 ポツプされたらR2=エレメント、 そうでなければR2=0 第8図はLIFOリストからエレメントを除去する場合
のフローチャートである。第1のステップでブロック7
2に示すよ5にスタックのトップ(TO3)のアドレス
がフェッチされる。判別ブロック74においてスタック
のトップをテストしてスタックが空なのかまたは値を有
するのかを判別する。スタックが空であればPOPプロ
グラムが76で終了する。除去するものが何もないから
である。
しかし、スタックが空でないなら、ブロック78のCO
MPARE  AND  LOAD(CAL)インスト
ラクションを用いて、スタックのトップ(TO8)が変
化しないことを確かめながら最新エレメントからつぎの
ポインタの値をフェッチする。TO8が変化したなら(
ブロック82で判別)、プログラムは判別ブロック74
に戻る。
TO8が変化しなかったなら、プログラムはCOMPA
RF: AND  5WAP(CSD)インストラクシ
ョンへとブロック86に示すように進む。TO8のリプ
レースメント値をブロック78において、CALインス
トラクションによりフェッチしたつぎのポインタの値に
設定する。ブロック86においてつぎのフィールド用の
リプレースメント値をゼロに設定する。TO8およびつ
ぎのフィールドが変化しないことを確かめながら、TO
8の値をつぎのポインタの値で置き換え、つぎのポイン
タの値をゼロで置き換える。これをC8Dインストラク
シヨンで行う。
判別ブロック79においてTOSポインタが変わったか
どうガ為を判別する。答えがイエスなら、プログラムは
判別ブロック74に戻る。答えがノーであれば、ブロッ
ク84においてつぎのポインタが変わったかを判別する
。答えがイエスであれば、プログラムはCOMPARE
  AND  5WAPDISJOINTインストラク
シヨンに戻る。ブロック84での答えがノーであれば、
POPルーチンをブロック88で終了させる。プログラ
ムが終了してゼロまたはエレメントのアドレスが生じる
F1発明の詳細 な説明したようにこの発明によればCOMPARE  
AND  LOADインストラクションを用いて1の位
置の自答が変わっていないことに応じて他の位置の値を
フェッチすることができる。
またCOMF’ARE AND  5WAP  DIS
JOINTインストラクションを用いて、2つの隣接し
ていない記憶位置を同時に更新することができる。
【図面の簡単な説明】
第1図はこの発明のCOMPARF: ANDLOAD
インストラクションの操作を示すフローチャート、第2
図はこの発明のCOMPAREAND  5WAP  
DISJOINTインストラクショ/の操作を示すフロ
ーチャート、第3図は二重ヘッド待ち行列FIFOおよ
びこの発明によるリスト操作後の状態を示す図、第4A
図および第4B図はこの発明によって第3図の二重ヘッ
ド待ち行列からエレメントを削除する場合を説明するフ
ローチャート、第5図はこの発明によって二重ヘッド待
ち行列にエレメントを付加する場合を示す図、第6図は
第5図のエレメントを待ち行列へ挿入する方法を示すフ
ローチャート、第7図はLIFO待ち行列リストおよび
この発明によるリスト操作後の状態を示す図、第8図は
この発明によって第7図のスタックからエレメントを除
去する場合を説明するフローチャートである。 出願人  インターナショナル・ビジネス・マシーンズ
・コーポレーション 復代理人  41′理士  澤  113   俊  
夫FIG。 4B

Claims (2)

    【特許請求の範囲】
  1. (1)データ処理システムにおいて不連続の位置に配さ
    れたデータを比較して転送するデータ処理システムのデ
    ータ操作方法において、 メモリ中に配された第1のオペランドおよび第2のオペ
    ランドを比較するステップと、 比較結果が不一致であるときにメモリ中に配された第3
    オペランドに第4オペランドの値を転送するステップと
    、 メモリ中の標識を成功を示すように設定するステップと
    、 第2のオペランドをフェッチするのに先だつて第2オペ
    ランドの位置でシリアル化処理を実行するステップとを
    有し、 メモリ中の1の位置の値が変化しないことに基づいて他
    の位置から値をフェッチするようにしたことを特徴とす
    るデータ処理システムのデータ操作方法。
  2. (2)データ処理システムにおいて不連続の位置に配さ
    れたデータを比較して交換するデータ処理システムのデ
    ータ操作方法において、 メモリ中に配された第1のオペランドおよび第2のオペ
    ランドを比較する第1の比較ステップと、第1の比較ス
    テップの比較結果が一致であるときに、メモリ中に配さ
    れた第3のオペランドおよび第4のオペランドを比較す
    る第2の比較ステップと、 第2の比較ステップが一致であるときに、第1の比較ス
    テップ用に第2のオペランドがフェッチされてから、第
    2の比較ステップ用の第4のオペランドがフェッチされ
    るまでの間他のユーザが第2のオペランドの位置または
    第4のオペランドの位置にアクセスするのを禁止するス
    テップと、比較および交換の操作を終了させるステップ
    とを有し、第1の比較ステップおよび第2の比較ステッ
    プでの比較がともに一致であるときに第1の置換オペラ
    ンドが第2のオペランドの位置にストアされ、第2の置
    換オペランドが第4のオペランドの位置にストアされる
    ようにしたデータ処理システムのデータ操作方法。
JP1276178A 1988-10-28 1989-10-25 待ち行列又はスタックから要素を除去する方法 Expired - Lifetime JPH0642204B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US264289 1988-10-28
US07/264,289 US5081572A (en) 1988-10-28 1988-10-28 Manipulation of time-ordered lists and instructions therefor

Publications (2)

Publication Number Publication Date
JPH02163835A true JPH02163835A (ja) 1990-06-25
JPH0642204B2 JPH0642204B2 (ja) 1994-06-01

Family

ID=23005378

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1276178A Expired - Lifetime JPH0642204B2 (ja) 1988-10-28 1989-10-25 待ち行列又はスタックから要素を除去する方法

Country Status (4)

Country Link
US (1) US5081572A (ja)
EP (1) EP0366585B1 (ja)
JP (1) JPH0642204B2 (ja)
DE (1) DE68926874D1 (ja)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE68920740D1 (de) * 1989-09-20 1995-03-02 Ibm Vorrichtung zur Nachrichtenwarteschlangenbetriebssteuerung in einem Speicher.
JP2781092B2 (ja) * 1991-11-06 1998-07-30 富士通株式会社 システム間排他制御方式
US5398330A (en) * 1992-03-05 1995-03-14 Seiko Epson Corporation Register file backup queue
US5448708A (en) * 1992-10-30 1995-09-05 Ward; James P. System for asynchronously delivering enqueue and dequeue information in a pipe interface having distributed, shared memory
US5673307A (en) * 1994-02-17 1997-09-30 Spectralink Corporation Handoff method for indoor cellular phone system
US6247064B1 (en) * 1994-12-22 2001-06-12 Unisys Corporation Enqueue instruction in a system architecture for improved message passing and process synchronization
US5893157A (en) * 1997-05-28 1999-04-06 International Business Machines Corporation Blocking symbol control in a computer system to serialize accessing a data resource by simultaneous processor requests
US5895492A (en) * 1997-05-28 1999-04-20 International Business Machines Corporation Processor associated blocking symbol controls for serializing the accessing of data resources in a computer system
US5956714A (en) * 1997-08-13 1999-09-21 Southwestern Bell Telephone Company Queuing system using a relational database
US5895494A (en) * 1997-09-05 1999-04-20 International Business Machines Corporation Method of executing perform locked operation instructions for supporting recovery of data consistency if lost due to processor failure, and a method of recovering the data consistency after processor failure
US6009261A (en) * 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6496975B1 (en) 1999-10-15 2002-12-17 International Business Machines Corporation Method, system, and program for performing conditional program operations
US7000234B1 (en) 2000-01-20 2006-02-14 Sun Microsystems, Inc. Maintaining a double-ended queue as a linked-list with sentinel nodes and delete flags with concurrent non-blocking insert and remove operations using a double compare-and-swap primitive
WO2001053942A2 (en) * 2000-01-20 2001-07-26 Sun Microsystems, Inc. Double-ended queue with concurrent non-blocking insert and remove operations
US7539849B1 (en) * 2000-01-20 2009-05-26 Sun Microsystems, Inc. Maintaining a double-ended queue in a contiguous array with concurrent non-blocking insert and remove operations using a double compare-and-swap primitive
US7017160B2 (en) 2000-04-18 2006-03-21 Sun Microsystems, Inc. Concurrent shared object implemented using a linked-list with amortized node allocation
US6826757B2 (en) 2000-04-18 2004-11-30 Sun Microsystems, Inc. Lock-free implementation of concurrent shared object with dynamic node allocation and distinguishing pointer value
US7117502B1 (en) * 2000-11-10 2006-10-03 Sun Microsystems, Inc. Linked-list implementation of a data structure with concurrent non-blocking insert and remove operations
US7769791B2 (en) 2001-01-12 2010-08-03 Oracle America, Inc. Lightweight reference counting using single-target synchronization
US7299242B2 (en) 2001-01-12 2007-11-20 Sun Microsystems, Inc. Single-word lock-free reference counting
US6880071B2 (en) * 2001-04-09 2005-04-12 Sun Microsystems, Inc. Selective signalling of later reserve location memory fault in compound compare and swap
US7836228B1 (en) 2004-06-18 2010-11-16 Oracle America, Inc. Scalable and lock-free first-in-first-out queue implementation
US7908441B2 (en) * 2002-01-11 2011-03-15 Oracle America, Inc. Value recycling facility for multithreaded computations
US9052944B2 (en) 2002-07-16 2015-06-09 Oracle America, Inc. Obstruction-free data structures and mechanisms with separable and/or substitutable contention management mechanisms
US7395274B2 (en) 2002-07-16 2008-07-01 Sun Microsystems, Inc. Space- and time-adaptive nonblocking algorithms
US7814488B1 (en) 2002-09-24 2010-10-12 Oracle America, Inc. Quickly reacquirable locks
US7293143B1 (en) 2002-09-24 2007-11-06 Sun Microsystems, Inc. Efficient non-blocking k-compare-single-swap operation
US6938054B2 (en) * 2002-11-25 2005-08-30 International Business Machines Corporation Systems, methods, and computer program products to optimize serialization when porting code to IBM S/390 UNIX system services from a UNIX system
US7424477B1 (en) 2003-09-03 2008-09-09 Sun Microsystems, Inc. Shared synchronized skip-list data structure and technique employing linearizable operations
US10049127B1 (en) 2003-12-19 2018-08-14 Oracle America, Inc. Meta-transactional synchronization
US7703098B1 (en) 2004-07-20 2010-04-20 Sun Microsystems, Inc. Technique to allow a first transaction to wait on condition that affects its working set
US8074030B1 (en) 2004-07-20 2011-12-06 Oracle America, Inc. Using transactional memory with early release to implement non-blocking dynamic-sized data structure
US7395382B1 (en) 2004-08-10 2008-07-01 Sun Microsystems, Inc. Hybrid software/hardware transactional memory
US7711909B1 (en) 2004-12-09 2010-05-04 Oracle America, Inc. Read sharing using global conflict indication and semi-transparent reading in a transactional memory space
US7680986B1 (en) 2004-12-30 2010-03-16 Sun Microsystems, Inc. Practical implementation of arbitrary-sized LL/SC variables
US7577798B1 (en) 2004-12-30 2009-08-18 Sun Microsystems, Inc. Space-adaptive lock-free queue using pointer-sized single-target synchronization
US7533221B1 (en) 2004-12-30 2009-05-12 Sun Microsystems, Inc. Space-adaptive lock-free free-list using pointer-sized single-target synchronization
US9990240B2 (en) * 2015-12-11 2018-06-05 Successfactors, Inc. Event handling in a cloud data center

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3886525A (en) * 1973-06-29 1975-05-27 Ibm Shared data controlled by a plurality of users
US4136386A (en) * 1977-10-06 1979-01-23 International Business Machines Corporation Backing store access coordination in a multi-processor system
US4320455A (en) * 1978-01-09 1982-03-16 Honeywell Information Systems Inc. Queue structure for a data processing system
US4394727A (en) * 1981-05-04 1983-07-19 International Business Machines Corporation Multi-processor task dispatching apparatus
US4482956A (en) * 1982-11-04 1984-11-13 International Business Machines Corporation Parallel queueing method
US4604694A (en) * 1983-12-14 1986-08-05 International Business Machines Corporation Shared and exclusive access control
US4584640A (en) * 1984-06-27 1986-04-22 Motorola, Inc. Method and apparatus for a compare and swap instruction
US4673633A (en) * 1984-06-28 1987-06-16 Cooperbiomedical, Inc. Method of determining cystic fibrosis ciliostatic factor
US4858116A (en) * 1987-05-01 1989-08-15 Digital Equipment Corporation Method and apparatus for managing multiple lock indicators in a multiprocessor computer system
US4807111A (en) * 1987-06-19 1989-02-21 International Business Machines Corporation Dynamic queueing method

Also Published As

Publication number Publication date
US5081572A (en) 1992-01-14
EP0366585A3 (en) 1992-06-03
DE68926874D1 (de) 1996-08-29
EP0366585A2 (en) 1990-05-02
JPH0642204B2 (ja) 1994-06-01
EP0366585B1 (en) 1996-07-24

Similar Documents

Publication Publication Date Title
JPH02163835A (ja) 待ち行列又はスタックから要素を除去する方法
US5742785A (en) Posting multiple reservations with a conditional store atomic operations in a multiprocessing environment
US5317739A (en) Method and apparatus for coupling data processing systems
US7873794B2 (en) Mechanism that provides efficient multi-word load atomicity
US4316245A (en) Apparatus and method for semaphore initialization in a multiprocessing computer system for process synchronization
US4394725A (en) Apparatus and method for transferring information units between processes in a multiprocessing system
US5442763A (en) System and method for preventing deadlock in multiprocessor multiple resource instructions
US5968157A (en) Locking of computer resources
US4369494A (en) Apparatus and method for providing synchronization between processes and events occurring at different times in a data processing system
US4395757A (en) Process synchronization utilizing semaphores
JPH0324696B2 (ja)
US6963882B1 (en) Method and apparatus for processing a list structure
JP3335352B2 (ja) アウトオブオーダジョブ処理方法および装置
US5297281A (en) Multiple sequence processor system
US6862595B1 (en) Method and apparatus for implementing a shared message queue using a list structure
JPS60128537A (ja) 多重プログラミング・システム
JPS5939785B2 (ja) デ−タ処理装置
JPH0227440A (ja) 記憶システム
WO1999035563A1 (en) Method of asynchronous management of a circular queue in a multiprocess environment
KR19990077481A (ko) 세마포어연산을수행하기위한방법및장치
US6230230B1 (en) Elimination of traps and atomics in thread synchronization
JPH0231419B2 (ja)
CN1303043A (zh) 具有指令历史信息的基本块高速缓存的微处理器
EP1852781A1 (en) Compare, swap and store facility with no external serialization
US5897658A (en) Method and apparatus for protecting portions of memory by providing access requests to a communications area for processing by a hidden server