Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成の手引


4.6.6 ロックマイグレーション

dc_lck_get関数で資源の排他をする場合,一つのグローバルトランザクション内の各トランザクションブランチに,資源の占有権が順次移動します。この機能をロックマイグレーションといいます。ロックマイグレーションによって,トランザクションブランチ間の排他待ちやデッドロックを防げます。そのため,あるグローバルトランザクションで排他を指定した資源に対しては,資源の解放をしないかぎり,一つのグローバルトランザクション内のどのトランザクションブランチからでもアクセスできます。

ロックマイグレーションは次の場合に保証されます。

〈この項の構成〉

(1) ロックマイグレーションと排他制御モード

ロックマイグレーションでは,PRモードで排他をしても,別のトランザクションブランチでEXモードと指定すれば,それ以降の排他はすべてEXモードになります。一つのグローバルトランザクション内では,一度EXモードで排他した資源には,PRモードで排他できません。すべてEXモードでの排他となります。

(2) ロックマイグレーションでの資源の解放

ロックマイグレーションの排他は,グローバルトランザクションが終了したときに,自動的に解放されます。グローバルトランザクションの終了を待たないで,排他を解放できる場合は,次に示す方法で解放してください。

(3) ロックマイグレーションでの注意事項

同期応答型RPCのdc_rpc_call関数でロックマイグレーションが起こったあとで,このdc_rpc_call関数がタイムアウトなどでエラーリターンした場合は,排他した資源に対するアクセス(確保済みの資源へのアクセスや新たな排他要求)はしないでください。アクセスした場合の動作は保証しません。

ロックマイグレーションの概要を次の図に示します。

図4‒32 ロックマイグレーションの概要

[図データ]