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

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

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

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

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

シミュレーション1:

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







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

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

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

シミュレーション2:

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