同時実行制御とは
データ管理プログラミングでは、同時実行制御は、同時操作によって正確な結果が生成されるようにするために設計されたメカニズムです。 これらの結果もタイムリーに取得する必要があります。 同時実行制御は、ユーザーが取得できる検索可能な情報のキャッシュがあるデータベースでよく見られます。
プログラマーは、共有データに対する重要なトランザクションの効果が連続して同等になるようにデータベースを設計しようとします。 これが意味することは、トランザクションのセットと接触するデータは、すべてのトランザクションが特定の順序で連続して実行される場合に結果が得られる特定の状態になることです。 2つのトランザクションによって同時に変更された結果、そのデータが無効になる場合があります。
相互排除の使用や、どのトランザクションにアクセス権があるかを決定するリソースの作成など、トランザクションを次々に実行することを保証する方法は複数あります。 ただし、これはやり過ぎであり、プログラマーが分散システムでの同時実行制御の恩恵を受けることはできません。 同時実行制御により、複数のトランザクションを同時に実行しながら、これらのトランザクションを互いに遠ざけることができ、線形化が保証されます。 同時実行制御を実装する1つの方法は、リソースを共有するシリアルトランザクション実行のために特定のリソースで排他ロックを使用することです。 トランザクションは、使用することを目的としたオブジェクトをロックします。他のトランザクションがロックされているオブジェクトを要求した場合、そのトランザクションはオブジェクトがロック解除されるまで待機する必要があります。
分散システムでのこのメソッドの実装には、ロックマネージャー(リソースロックを発行するサーバー)が含まれます。 これは、クライアントがロックを要求し、特定のリソースのロックを解除するためのメッセージを送信する集中相互排除のサーバーに非常に似ています。 ただし、同時実行制御にはシリアル実行の保存が依然として必要です。 2つの別々のトランザクションが同様のオブジェクトセットにアクセスする場合、結果は同様であり、これらのトランザクションが特定の順序で実行されたかのようになります。 リソースへのアクセスの順序を保証するために、2フェーズロックが導入されました。つまり、トランザクションは、個別のロックのリリース時に新しいロックを許可されません。
並行性制御のための2フェーズロックでは、その初期フェーズは成長フェーズと見なされ、トランザクションが必要なロックを取得します。 次のフェーズは縮小フェーズと見なされます。このフェーズでは、トランザクションのロックが解放されます。 このタイプのロックには問題があります。 トランザクションが異常終了すると、他のトランザクションは異常終了したトランザクションによって変更およびロック解除されたオブジェクトのデータを使用する場合があります。 これにより、他のトランザクションが中止されます。