WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:DBMのロックについて

0:[投稿] minchou [2002/04/12 14:26 ][環境:WIN+IE UNIX系+Perl]

複数のDBMを利用する時には、下記のように一括してロックしても良いのでしょうか?
それとも、個別にロックしなければ、意味がないのでしょうか?


open(LOCK,"lockfile");
flock(LOCK,2);

dbmopen(%DATA1,$data1_file,0666);
$DATA1{$data1}++;
dbmclose(%DATA1);

dbmopen(%DATA2,$data2_file,0666);
$DATA1{$data2}++;
dbmclose(%DATA2);

flock(LOCK,8);
close(LOCK);


1:[質問] えび [2002/04/12 15:14 ]

 というか、そもそも何をしたいのでしょうか?
 それぞれの DB がどのように誰に利用されるのか、といった状況が分からないと何とも言えません。
 そのデータが別プロセスによって利用される事がないのであればそもそもロックする必要もないわけですし、状況によっては DBM 自体のロック機能で事足りるかもしれません。もちろん個別にロックする必要があるのかもしれません。

 いずれにせよ、どういう状況で何をしたいのかが分からないと全く判断できないわけです。


2:[回答] minchou [2002/04/13 13:48 ]

主にアクセスログを取得しようと考えています。
閲覧者の利用ブラウザや、ホスト名、時間帯・月別アクセス数などを取得して、
管理者など、特定の人々に対して、ログを公開します。

こんな感じの説明で良いでしょうか?


3:[回答] しなのむし [2002/04/15 23:49 ]

>open(LOCK,"lockfile");
>flock(LOCK,2);

読む為にオープンしているのに
書き込み宣言してもロック出来ませんよ。

自信がない時は
望むようにロック出来ているか
自分の目で確認するのが一番。
百聞は一見にしかずです。


4:[質問] minchou [2002/04/16 19:23 ]

>自分の目で確認するのが一番。

ファイルのロックって自分の目で確認できるんですね!
どうやって確認すれば良いのでしょうか?

あと、
>読む為にオープンしているのに
>書き込み宣言してもロック出来ませんよ。

の意味が解りません…。

open(LOCK,"lockfile");
flock(LOCK,2);

flock(LOCK,8);
close(LOCK);

は、本で読んだ通りに使っていましたが、
どの辺が書き込み宣言になっているのでしょうか?


5:[回答] しなのむし [2002/04/17 01:24 ]

>どの辺が書き込み宣言になっているのでしょうか?

この辺を参考にどうぞ。
http://tohoho.wakusei.ne.jp/wwwperl2.htm#flock

>ファイルのロックって自分の目で確認できるんですね!
>どうやって確認すれば良いのでしょうか?

sleep(10); # 10秒待つ

等を挟みこんで
別プロセスからロック出来るか試してみる。


6:[回答] minchou [2002/04/18 16:52 ]

flock(LOCK,2); の2が書き込み宣言になっていたんですね!

でも、
dbmopen(%DATA1,$data1_file,0666);
$DATA1{$data1}++;
dbmclose(%DATA1);

の場合、データベースから$DATA1{$data1}と同じデータを検索して、同じものがあれば1を足す。
ということになるので、読み込みと書き込みを同時に行っていると思うのですが…。
この場合には、読み込みのロックだけで良いのでしょうか?


7:[回答] しなのむし [2002/04/18 18:24 ]

>下記のように一括してロックしても良いのでしょうか?

理解してそうで実は理解してないのですね(^^;
一から説明するのはちと骨が折れるので
基本は自分で勉強してください。

結論を書きますが

open(LOCK,">lockfile"); # lockfileは作ること
flock(LOCK,2);
# 排他したい処理
close(LOCK);

とすれば良いと思います。
他で$data1_file、$data2_fileを
開ける時(読みも書きも)は
必ず同じようにすること。
そうでないと意味がありません。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World