2012年11月08日

ファイルを使って排他ロックするには、適当にロックファイルを作って flock $fh, LOCK_EX とかすると思います。
flock で使ったファイルハンドルが close されたら自動的に unlock されるので、最初っから Guard な感じなんだけどロック用のファイルも一緒に消したいので ExclusiveLock::Guard ってのを作った。

use ExclusiveLock::Guard;
my $lock = ExclusiveLock::Guard->>new('/tmp/megazaru.lock');

って書くだけで $lock が生きてる間はロックかかってて、ロック外れたらファイルも一緒に消してくれるというだけの物。

ノンブロッキングなインターフェィスが欲しければ

use ExclusiveLock::Guard;
my $lock = ExclusiveLock::Guard->>new('/tmp/megazaru.lock', nonblocking =>l 1);
die '別の人にロックされてるよ'  unless $lock->is_locked;

みたいな風に書けます。

MySQL::NameLocker 使えば同じ事を MySQL の SET_LOCK 使って実装してるんだけど、ファイルロックでこういうの無かったので。

Posted by Yappo at 2012年11月08日 17:53 | TrackBack | Perl
Comments
Post a comment









Remember personal info?






コメントを投稿する前に↓の場所にnospamと入力してください。