next up previous contents index
Next: 共有ヒープへのコピーの遅延 Up: 処理系の構成 Previous: ゴールの投げだし

共有変数の具体化

共有メモリ変数は、ジェネレータオブジェクト SHVAR により実現している (runtime/gg_shvar.c)。SHVAR にはメソッド表フィールドと 中断チェーンがあり、 メソッド表フィールドはロック用フィールドとしても利用している。

typedef struct Shvar {
  struct generator_object_method_table *method_table;
  Sinfo chain;
} Shm_var;

各ノードはロックして変数の状態を変える。通常ノードはフックした後、ロック をはずさなければならない。しかし具体化した後にはアンロックは必要ない。

これは、 ロック時に、単にロック用フィールドをスピンするだけでなく、変数の値の設定 の有無を監視しながら、ロック用フィールドを監視する。ゆえに、ロックが解除され ればロックは成功するし、具体化されても、スピンから抜け、該当する処理に移れる。 これらの処理は、shvar オブジェクトのUNIFYメソッドにて行われている。

構造体と共有変数とが具体化される時には以下で述べるような 最適化も行っており、これもUNIFYメソッド中で実装されている。



Sekita Daigo
1998-05-18