Perlコーディング初心者質問スレ Part 61
■ このスレッドは過去ログ倉庫に格納されています
0723nobodyさん
2010/11/24(水) 22:54:58ID:???> while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
このopenて、毎回必ず成功するか毎回必ず失敗するか、しかないよ。たぶん。
必ず失敗するとしたらファイルのパーミッションで弾かれるとかくらい。(他にもあるかな?)
だからwhileで「closeが成功するまで繰り返す」てのは意味ない。
まあ仮にこれで「ファイル使用中ですよ」宣言ができたとして、
前者のプロセスと後者のプロセス、それぞれ同時に1つのプロセスしか起動しないとしても
タイミングによってはまったく排他処理できない。
上のプロセスをA、下のプロセスをB、としてそれぞれ行番号つけてみる。
A1: my $flagfile="locked";
A2: while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
A3: # ファイル処理
A4: unlink $locked;
B1: my $flagfile="locked";
B2: while (-e $flagfile) {}
B3: # ファイル処理
(続く)
■ このスレッドは過去ログ倉庫に格納されています