分类: LINUX
2011-05-24 16:50:00
在用perl开发一些系统级软件时,经常会遇到文件锁的问题。为什么要使用文件锁呢?举一个不是太恰当的例子:(注意,确实是不太恰当,但有助于理解)街上的柜员机(ATM)同时只能服务一个人(数据源),而如果有多个人(不同的进程)要取钱,存钱,则会形成冲突,怎么解决呢?假设柜员机旁边有一个管理员(kernel),柜员机只向持有有效许可(flock,文件锁)的人提供服务,而有效许可只有一份,由管理员发放给申请需要使用ATM的人。 以下是一段演示程序,名叫flock.pl [code] use Fcntl qw(:flock); use POSIX qw(strftime); open (FD, " < source.txt") or die "$!\n"; flock(FD, LOCK_EX); print "Yeah i get the lock by pid=$$ at ", cur_time(), "\n"; sleep 10; flock(FD, LOCK_UN); print "Oops i lose the lock by pid=$$ at ", cur_time(), "\n"; close FD; sub cur_time { strftime "%H:%M:%S", localtime; } [/quote] 使用方法: 打开2个控制台(console),假设分别为A窗口和B窗口,在A命令行下输入: perl flock.pl 此时会显示: Yeah i get the lock by pid=6122 at 14:20:39 perl flock.pl 则暂时无任何显示,等到A控制台的程序执行完毕,显示: Oops i lose the lock by pid=6122 at 14:20:49 Yeah i get the lock by pid=6123 at 14:20:49 Oops i lose the lock by pid=6123 at 14:20:59 |