
ファイルを使って排他ロックするには、適当にロックファイルを作って flock $fh, LOCK_EX とかすると思います。
flock で使ったファイルハンドルが close されたら自動的に unlock されるので、最初っから Guard な感じなんだけどロック用のファイルも一緒に消したいので ExclusiveLock::Guard ってのを作った。
use ExclusiveLock::Guard;
my $lock = ExclusiveLock::Guard->>new('/tmp/megazaru.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