• 有限の値でTimestampを管理する手法
  • タイムスタンプを用いるMutexアルゴリズムで使われる大事な機構
  • 各プロセスは有限の範囲内でタイムスタンプを割り当てられる
  • タイムスタンプ値は循環する
  • 空間計算量: n個のプロセスに対してn個必要
  • シーケンシャルなアルゴリズム。これの並行タイムスタンピングアルゴリズムもあるらしい。

アルゴリズム

先行グラフの作り方

  • プロセス数に対して、を作れば良い
    • : Single node
    • : 2 happend-before 0 happend-before 1 happend-before 2
      • 2つのスレッドは常に隣接するノード上にトークンを持ち、エッジの方向はそれらの相対的な順序を示す
      • スレッドが2つしかないので、2つしかラベルがなく、これで問題がない
      • この3つのノードの中をぐるぐる回り続ければ良い
    • :
      • 合成をするには、のグラフの各ノードを、で置換すればいい、ということ
      • は、の各ノードをで置換したものである
  • インデックス
    • のすべてのノードを、桁の3進数で表現できる
      • 上位の桁はサブグラフのIndexを表し、上位から桁は末端グラフの中のノードを表す
    • : 00, 01, 02, 10, 11, 12, 20,21, 22

ラベルづけ

  • 同じサブグラフに2つのスレッドがいる場合、そのサブグラフをdominateしている別のサブグラフに入る

    • 同じサブグラフに1つのスレッドしかいない場合は、と同様
  • の例を見ると、1つのサブグラフの中には2つしか入れない。その後に入ってきたやつは、必ずその後のサブグラフに入る

  • なんか冗長すぎない? 多重なグラフを作らなくても、のノード数を3からスレッド数+1に増やすだけでいい気がするんだけど…

参考