ファイルロック(排他処理)の必要性

トップ > プログラミング研究 > ファイルロック
一つ前にもどる 目次にもどる 次のページへ

ファイルのロック(排他処理)の必要性

前回のカウンターを作った最後に、「このプログラムには重大な欠陥がある」ということを書いたと思います。この欠陥とは、カウンターの値を保存しているファイル(以下、データファイルと呼びます。)にあります。このデータファイルは、カウンタープログラムが起動されるとき、つまり、誰かがそのページにアクセスしたときに読み出されたり、書き込まれたりしますので、不特定多数の人に同時にアクセスされる可能性があるのです。

これがどのような問題を引き起こすのでしょうか?

通常、2人以上でファイルを利用することを「共有」と言います。ファイルの中身を見るだけ、いわゆる「参照」するだけなら、何も問題はありません。が、このファイルの中身を皆で書き換えたりするときに大きな問題が 発生します。

通常一人で読み書きする場合はどのようにしているのでしょうか?

読むだけの場合
  1.ファイルを開く
  2.データを取り出す
  3.ファイルを閉じる
  4.見る

書く場合
 1.ファイルを開く
 2.データを取り出す
 3.(ファイルを閉じる)
 4.取り出したデータに付け加える(もしくは、加工する)
 5.(ファイルを開く)
 6.データを書き込む
 7.ファイルを閉じる

以上のようになっています。書く場合には、もしかすると、3、5の手順はないこともあるでしょう。普通に考えるとなにも問題はないのですが、この操作を複数で同時に行った場合を考えてみてください。

上の例の場合、A、Bと2人が「ほぼ」同時に同じページを訪問したと想定します。

ファイル書き込みの流れ Aさんの方が若干早かったので、Aがカウンターファイルを開きました。すると、カウンターには丁度「100」という数字があったので、そこに自分自身のアクセスを足して101というファイルを書き込もうとしています。Aがファイルを書き込む直前にBがアクセスしてきました。Bはカウンターファイルを開きました。Aの101という値はまだ書き込まれていないので、ファイルは「100」のままです。

その後、Aが101のファイルを書き込みました。Bは開いたファイルの数字が100のままなので、それに自分自身のアクセス数を足して101というファイルで書き込みました。

最終的にA、B2人のアクセスがあったにもかかわらず、カウンターは100から101と1件しかカウントされませんでした。

通常このような現象がおきるのは、すごい確立だとは思うのですが、アクセス数がそこそこ増えてくると、このようなことは起こりえます。また、今の例はカウンターでしたが、掲示板だったとすれば、せっかく書いてくれた掲示内容が反映されない、ということになります。また、Eコマースなどの注文などのデータの場合には、金銭トラブルになりかねません。

このようなことがおきないように、ファイルを複数で同時に使う場合、つまり共有する場合には「排他」という処理を行います。ファイルを「ロックする」、とも言います。

Word解説 - 排他(ファイルロック)とは

ネットワークで情報を共有するようなシステムになってくると、一つのファイルを大勢で読み書きすることが多くなってきます。このような場合、自分がファイルに書き込みを行っているときに、他の誰かも同じように書き込みを行っている場合、書き込まれたファイルに矛盾が生じてしまうことがあります。この矛盾を防ぐために、自分が書き込んでいる間は、他の誰にも書き込みをさせない処理のことを「排他」といいます。

一つ前にもどる 目次にもどる 次のページへ
(作成2003/09/19 by あいまい)

トップ > プログラミング研究 > ファイルロック

日時: 2008年01月25日 11:16
newsingに投稿BuzzurlにブックマークBuzzurlにブックマークlivedoorクリップに投稿 Choixにブックマーク イザ!ブックマーク このエントリーを含むはてなブックマーク
トップに戻る
このエントリーの所属カテゴリ: プログラミング研究
このエントリーのタイトル:ファイルロック(排他処理)の必要性



copyright © 2000-2008 all rights reserved
あいまいモード・コム - rss2.0 atom
newsingに投稿BuzzurlにブックマークBuzzurlにブックマークlivedoorクリップに投稿 Choixにブックマーク イザ!ブックマーク このエントリーを含むはてなブックマーク