CGIでロックをかける場所について

[上に] [前に] [次に]
ひげむう [E-Mail] [HomePage] 1999/05/01(土) 16:22:12
こんにちは。とほほさんのスクリプトを多いに活用している者です。
では、早速質問です。

CGIでロックをかける必要のあるのはデータファイルをオープンしている間(読み込み時も含む)ですか?
それともデータファイルに書き込みをしている間だけですか?

とほほさんのCGIスクリプトでは、前者のようになっていましたが。

やま 1999/05/02(日) 02:02:44
例えば、掲示板で記録されている記事を単に表示させるだけの時などは、データファ
イルをオープンしたからといって、ロックする必要はないでしょう。
また、カウンタならどこで掛けるかが問題になってくると思います。通常、(1)ファイルを
オープンする、(2)カウント数を変数に代入、(3)プラス1する、(4)ファイルに書き込む、
(5)ファイルを閉じる、となりますが、この場合(1)-(2)の間でロックを掛けるべきです。
書き込みをしている間だけということであれば、(3)-(4)の間ということになるでしょうが、
(2)(3)が多重に実行されてしまうと狂ってしまいます。
要は、何をさせるかによってロックが必要か、またどこで掛けるかは違ってくると思います。
多重に実行されたくない部分の直前で掛けるのが有効です。その部分が、どこであるかの判
断が大切だと思います。
(どなたか、もう少し分かりやすい説明をしてあげてください)

ひげむう [HomePage] 1999/05/03(月) 16:16:48
なるほど、ありがとうございます。
衝突によりデータファイルが物理的に壊れるのは、書込み時のみということですね。
また、カウンターのように、ロックをかける範囲を間違えるとデータは壊れはしなけど、論理的に狂う可能性があるということですね。

とほほ 1999/05/03(月) 23:36:56
 読み込んでいる最中に、誰かが中途半端にデータを書き換えてしまう
と、中途半端なデータを読んでしまいますよね。
 読み込む時には「読み込み宣言ロック=私が読んでいるから誰も書き
込まないでロック」を、書き込む時には「書き込み宣言ロック=私が書
き込んでいるから誰も読み込んだり書き込んだりしないでロック」をか
けるのが筋です。
(参考:http://www.tohoho-web.com/wwwperl2.htm#flock
 面倒なので、読み込み時はロックしなかったり、読み込み時にも書き
込み宣言相当のロックをかけたりすることもありますが・・・

ひげむう [HomePage] 1999/05/09(日) 22:37:30
[[解決]]
今まで、同時書き込みのときだけロックが必要だと思っていました。
読み込みと書き込みが同時に起きたとき、データが全て得られない可能性があることにすっかり気付きませんでした。
そういえば、あるチャットで人がたくさんいるとき、リロードしているとたまに発言データが全くなってしまう現象を見たことがあります。
(もう一度、リロードすれば直りますが)

そういう理由で、とほほさんのCGIでは、全体的にロックをかけていたのですね。
ありがとうございました。

やま 1999/05/10(月) 00:31:05
そうですね。頻繁に書き込みが行われるチャットなんかでは、
問題が出てきそうですね。気が付きませんでした>読み込み時ロック
しかし、読み込みが集中している場合、なかなか書き込み出来ない
といった問題が発生しないでしょうか。その点が不安です。
それとも、書き込み優先なのでしょうか?

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