前回のカウンターを作った最後に、「このプログラムには重大な欠陥がある」ということを書いたと思います。この欠陥とは、カウンターの値を保存しているファイル(以下、データファイルと呼びます。このデータファイルは、カウンタープログラムが起動されるとき、つまり、誰かがそのページにアクセスしたときに読み出されたり、書き込まれたりしますので、不特定多数の人に同時にアクセスされる可能性があるのです。これがどのような問題を引き起こすのでしょうか?通常、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コマースなどの注文などのデータの場合には、金銭トラブルになりかねません。このようなことがおきないように、ファイルを複数で同時に使う場合、つまり共有する場合には「排他」という処理を行います。ファイルを「ロックする」、とも言います。排他(ファイルロック)とはネットワークで情報を共有するようなシステムになってくると、一つのファイルを大勢で読み書きすることが多くなってきます。このような場合、自分がファイルに書き込みを行っているときに、他の誰かも同じように書き込みを行っている場合、書き込まれたファイルに矛盾が生じてしまうことがあります。この矛盾を防ぐために、自分が書き込んでいる間は、他の誰にも書き込みをさせない処理のことを「排他」といいます。