微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl 中常用的文件锁实例

这种方法具体实现是创建和删除一个特定名称文件,这在资源共享机制中通常称作semaphore。下面是个例子:

01: While(-f counter.lock){02:   select(undef,undef,0.1);}03: open(LOCKFILE,">counter.lock);04: dbmopen(%COUNTERS,$DOCUMENT_ROOT/DBM_FILES/counters,0666);05: if(!(defined($counters{'my_counter'})){06:   $counters{'my_counter'}=0;}07: $counters{'my_counter'})++;08: $count=$counters{'my_counter'};09: dbmclose (counters);10: close(LOCKFILE);11: unlink(counter.lock);     首先检查锁定标志文件是否存在,如果存在,就说明另一个进程正在使用该文件,于是等待直到该文件(此处命名为counter.lock)不存在为止。此处用select()的特殊形式循环等待,此语句使程序进入休眠状态一段时间,该时间段由最后一个参数定义。之所以不用sleep()函数是因为其基本单位为秒,对这种文件锁定而言太长了,几个微秒就足够了。    当锁定标志文件不再存在,就创建自己的锁定标志文件并开始修改计数,完成后关闭文件并用unlink函数将之删除,这样其它的进程又被允许修改计数。锁定标志文件并不是特殊的文件,其文件名也可以由你自己随意选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐