ロック機構について

[上に] [前に] [次に]
クライド 2000/02/23(水) 05:20:14
チャットの設置おいて、”ロック機構”(0=no 1=symlink 2=open)
っとあるのです。
チャットが安全になるような気はしますが、重くなる気もします。
ロックすることによって、どんなことが起きるか教えて下さい。

Ichi 2000/02/23(水) 06:15:12
ロックというのは、そのファイルを使用するとき、
読みこみ中にそのファイルに書きこまれては困るので、書き込みを制限し、
書きこみ中にそのファイルを読み書きされては困るので、読み書きを制限することです。
# あんまり正確じゃないような...

例えば、チャットCGIが同時に二つ(A,Bとします)起動されたとします。
どちらのCGIもデータファイルに書きこもうとします。
このとき、ロックしなければ、例えば
1.Aがデータファイルを開く
2.Aがデータファイルを読みこむ
3.Aがデータファイルを空にし、書き込みをはじめる。
4.Bがデータファイルを開く
5.Bがデータファイルを読みこむ(まだAが書きこみ途中なので不完全なデータ!)
6.Aがデータファイルを閉じる
7.Bがデータファイルを空にし、書きこみをはじめる。(不完全なデータに発言を追加したもの)
8.Bがデータファイルを閉じる
のような動作になります。
4でBが読みこんだデータは、不完全(空かもしれない!)です。
これに発言を追加してデータファイルに書きこむのですから、
データファイルは壊れてしまいます。

対して、ロック(自分が使っているのだから、ほかの奴は使うな)すると、例えば
1.Aがデータファイルを開く
2.Aがデータファイルをロックする
3.Aがデータファイルを読みこむ
4.Aがデータファイルを空にし、書き込みをはじめる。
5.Bがデータファイルを開く
6.Bがデータファイルをロックしようとするが、ロックされているので待機する
7.Aがデータファイルを閉じる
8.Bがデータファイルをロックする(Aがデータファイルへの書きこみを完了したので)
9.Bがデータファイルを読みこむ
10.Bがデータファイルを空にし、書きこみをはじめる。
11.Bがデータファイルを閉じる
6のようにロックされているファイルをロックしようとすると、
ロックが解除されるまで待機します。
(ファイルを閉じると自動的に解除されます)
つまり、読み書きを開始する前にファイルをロックする操作をすれば、
ロックされたファイルに読み書きしないようになるわけです。

# 正確じゃない部分があるな...
# うーん、これで伝わるのかな...

クライド 2000/02/24(木) 02:44:24
伝わってきました!
実際どのくらいの、同時書き込みがあるとロックするのかは、
自分で調べた方が良いですね!m(__)m
安全にするか、快適にするか(書き込みが流されても)は、
悩むとこですが・・・(~ヘ~;)ウーン

B-Cus 2000/02/24(木) 02:53:56
> 重くなる気もします。
僕は杞憂だと思います。

[上に] [前に] [次に]