レコード・ロックについての興味深い話を紹介しよう。
あなたが今、銀行口座に 10万円の預金をしていたとしよう。
当然、その口座のキャッシュ・カードがあるはずだが、家族用のキャッシュ・カードを
もう一枚用意しておく。
さて二人で銀行に出かけてゆき、キャッシュ・ディスペンサー(CD)で
最初に1枚のキャッシュ・カードで 10万円の引き出しの操作を行うことにする。
残高が 10万円あるので当然、10万円を引き出すことは可能であるが、
ただし最後の「確認」ボタンを押さないでおくことにする。
次にもう一枚の家族用のキャッシュ・カードでも隣の CD機で10万円の引き出しを要求する。
先のカードではまだ「確認」ボタンを押していないので口座には
まだ 10万円の残金があり、従って 10万円の引き出し要求には何の問題もないはずである。
こちらも「確認」ボタンはまだ押さないでおく。
最後に最初のカードによる操作で「確認」ボタンを押すと、残高には0 円が上書きされる。
そして2枚目のカードでも「確認」ボタンを押すと
10万円が引き出されて 0円が口座に上書きされる。
こうしてあなたは 10万円の残高の口座から 10万円 + 10万円 = 20万円の引き出しに
成功したことになる。
この 20万円を元のあなたの口座に振り込んで同じ操作を繰り返すと永遠と口座残高は
増え続けることになる。
この操作は成功することはないだろうし、もし操作したとしたら重大な犯罪であるので
試すことも厳に謹んで頂きたいし、結果の責任は一切負わない。
この話はコンピュータやメモリに知識のある人ほど、うまく行きそうな錯覚に落ちてしまうであろう。
この話の矛盾点は何であろうか?
それは DSPF
にデータが表示されることにレコード・ロックが為されていない場合
だけの話である。
OS400では更新用のレコードは自動的に排他制御が行われて他の更新用のユーザーからの
レコードの取得も許されないのである。
従って 2枚目のカードで「引き出し」を指定することはできない。
この話は例えば引き当て在庫の更新にも当てはまる。
受注入力 PGM で在庫の引き当て更新を行うのであれば、レコード・ロックを利用しないと
上記のような矛盾が発生してしまう。
最後に上記のCD の例は仮定としての例であるのでくれぐれもお試しにならないように
願いたい。