ソフト開発塾

KONDO-NETサーチ(KLSH)
- 新着 - VB - VC - Perl - PHP - カテゴリに登録 -

Linux

Perlでの排他制御(lock)その2


排他制御を行う場合、flockで無くても行える。
よく行っているのが、ロックファイル(ディレクトリ)を使用する方法である。
基本は単なる使用中の目印を自分勝手に作成するものです。
この目印が、ファイルであったり、ディレクトリであったり、symlinkであったりするのです。
sub lock{ ... }など、関数を作成してロックし、sub unlock{ ... }など、関数を作成してロック解除します。

	open IN, '<','累計金額' or die "オープン失敗 $!";
	$sum = ;
	close IN;

	$sum += 100;

	open OUT, '>','累計金額' or die "オープン失敗 $!";
	print OUT $sum;
	close OUT;
に、ロック・ロック解除を追加すると

	lockを入れる
	open IN, '<','累計金額' or die "オープン失敗 $!";
	$sum = ;
	close IN;
	unlockを入れる

	$sum += 100;

	lockを入れる
	open OUT, '>','累計金額' or die "オープン失敗 $!";
	print OUT $sum;
	close OUT;
	unlockを入れる
とすると、ほぼ同時に行った場合の、問題点はクリアできていない。

	lockを入れる
	open IN, '<','累計金額' or die "オープン失敗 $!";
	$sum = ;
	close IN;

	$sum += 100;

	open OUT, '>','累計金額' or die "オープン失敗 $!";
	print OUT $sum;
	close OUT;
	unlockを入れる
となる。
よく見かける間違っているのは、読み込み処理にロックを入れない。 この様なロジックになっているものがある。

	open IN, '<','累計金額' or die "オープン失敗 $!";
	$sum = ;
	close IN;

	$sum += 100;

	lockを入れる
	open OUT, '>','累計金額' or die "オープン失敗 $!";
	print OUT $sum;
	close OUT;
	unlockを入れる
この様にしたくなる理由は、わかるが間違いである。

ソフト開発塾 ソフト開発塾(LINUX)
---KONDO-NET.GR.JP---