[Glue!] Semaphore operation


トランザクションの排他制御

Glue Logic は複数のエージェント(アプリケーション・プログラムの実行プロセス) からアクセスされる資源であり、 内部に共用データを持つことから、 Glue Logic そのもののアクセスの排他制御とともに 共用資源の排他制御も行なうことができなければならない。

Glue Logic へのアクセスの排他制御は、通信制御サブシステムによって行なわれる。 この段階で、 Glue Logic に対するトランザクションはひとつの待ち行列に入れられ、 Glue Logic サーバ内部の資源を排他的に利用できる様になる。 このため、ひとつのトランザクションで指定される動作は、 すべてひとつの挙動で実現される不可分動作として考えることができる。


データ資源の排他制御

Glue Logic では共用データ中の一部を、 ひとつのエージェントが一時的に占有して利用できるようにするため、 そのための専用のトランザクションを用意する。 このトランザクションを使うと、 指定した名前の値が指定した値であった場合にのみ、 その名前の値を書き換える事ができる。

例えば、ある資源の占有者の識別子を入れるための名前があるとする。 この資源を占有するためには、この名前に自分のエージェント識別子を書き込めば良い。 (一般にこのような機能を持つ名前をセマフォという。) しかし、他のエージェントが占有している場合には、 その名前には占有エージェントの識別子が書き込まれている訳だから、 その名前に書き込みができるのはその名前の値が空白になっている場合だけである。

排他制御用のトランザクションはこのような場合に用いるもので、 占有者を示す情報を入れる名前の値が空白などのあらかじめ予期された値である場合にのみ、 自分の識別情報をその名前に書き込むことができる。
一般のエージェントでは、複数の資源を必要とすることから、 ひとつのトランザクションで同時に複数のセマフォを操作できる必要がある。 この場合には、 指定したすべての名前の値がすべて予期した通りの値であった時にのみ、 すべての値に対して指定の値を書き込むことで実現する事ができる。 この時、ひとつでも予期した値と異なった値を持った名前があった場合には、 新たな値の書き込みは一切行なわずに、指定した名前すべての現在の値を返す。

 [M.T. HomePage]  [written & copyrighted by Masayuki Takata]