|
アプリケーションが、トランザクション モード外または並行トランザクション内から単一レコードの読み取り操作および更新操作を実行する場合は、受動的並行性に依存して更新の競合を解決することができます。受動的並行性は MicroKernel によって自動的に適用されるものであり、アプリケーションまたはユーザーからの明示的な指示を必要としません。
受動的並行性の状態にある場合、MicroKernel はクライアントが操作にロック バイアスを適用しなくてもレコードを読み取れるようにします。最初のクライアントがレコードを読み取ってから、そのレコードの更新または削除を試みるまでの間に、2 番目のクライアントがそのレコードを変更した場合、MicroKernel はステータス コード 80 を返します。この場合、最初のクライアントが行う変更は、レコードの古いイメージに基づいています。そのため、最初のクライアントは更新または削除操作を実行する前に、レコードを再度読み取る必要があります。
受動的並行性により、開発者はわずかな変更だけでシングルユーザー環境からマルチユーザー環境へアプリケーションを直接移動できます。
表 35 と表 36 は、受動的並行性を使用している場合に 2 つのクライアントがどのように相互作用するかを示しています。トランザクションでない場合と並行トランザクションからの場合を示します。
メモ
クライアント 1 がレコード A の更新操作を既に実行した後でクライアント 2 がレコード A を読み取ったとしても、MicroKernel は手順 7 で競合エラーを正しく検出します。この競合が存在するのは、クライアント 1 が手順 6 でトランザクションを終了するまでレコード A に対して行った変更をコミットしないからです。クライアント 2 が手順 7 で更新を実行するときまでに、手順 5 で読み取ったレコード A のイメージは古くなってしまいます。
|