![]() |
|
Welcome to the Monastery | |
PerlMonks |
What can't I just open(FH, ">file.lock")?by faq_monk (Initiate) |
on Oct 13, 1999 at 03:42 UTC ( #805=perlfaq nodetype: print w/replies, xml ) | Need Help?? |
Current Perl documentation can be found at perldoc.perl.org. Here is our local, out-dated (pre-5.6) version: A common bit of code NOT TO USE is this:
sleep(3) while -e "file.lock"; # PLEASE DO NOT USE open(LCK, "> file.lock"); # THIS BROKEN CODE This is a classic race condition: you take two steps to do something which must be done in one. That's why computer hardware provides an atomic test-and-set instruction. In theory, this ``ought'' to work:
sysopen(FH, "file.lock", O_WRONLY|O_EXCL|O_CREAT) or die "can't open file.lock: $!":
except that lamentably, file creation (and deletion) is not atomic over
NFS, so this won't work (at least, not every time) over the net. Various schemes involving involving
|
|