リソースの共有における問題点の確認

データベースサーバーのテーブルのデータ(共同口座)に、複数のユーザが同時アクセスする場合の問題点:

排他制御無し: A氏とB氏の処理を同時に実行できてしまうと、大問題が発生する。

元々、3万円の残高の口座から、1万円引き落とすと同時に、1万円預け入れる、場合の例)

処理順序 A氏の画面 共同口座残高 B氏の画面
残高3万円 ←読み出し← 3万円
→読み出し→ 残高3万円
−1万円引落とし +1万円預金
4万円 ←書き込み← 残高4万円
残高2万円 →書き込み→ 2万円

シミュレーション1:

窓口A 口座データベース 窓口B







排他制御有り: A氏とB氏の処理は同時出来ない様に制御する。つまりリソースを同時に利用しないように制御する。

リソースを利用する為に必要なロックを用意し、ロックの取得と開放によりリソースの利用者を制限する。

処理順序 A氏の画面 共同口座残高 B氏の画面
共同口座の利用開始  ←ロック取得 3万円
残高3万円 ←読み出し← ロック取得失敗 口座は現在利用中
ロック開放待ち
−1万円引落とし ロック開放待ち
ロック開放待ち
残高2万円 →書き込み→ 2万円 ロック開放待ち
共同口座の利用終了 ロック開放 ロック開放待ち
ロック取得→ 共同口座の利用開始
→読み出し→ 残高2万円
10 +1万円預金
11 3万円 ←書き込み← 残高3万円
12 ロック開放 共同口座の利用終了

シミュレーション2:

窓口A 口座データベース 窓口B