Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re^4: opening files: link checking and race conditions

by danderson (Beadle)
on Aug 03, 2005 at 22:55 UTC ( #480662=note: print w/replies, xml ) Need Help??

in reply to Re^3: opening files: link checking and race conditions
in thread opening files: link checking and race conditions

Google "atomicity" and "race case" for more information, but here's a brief way how that would die: (P1 is process 1, P2 is process 2, they're not actually in the same program, but the commands from each are interleaved here since that can happen in reality)
P1: my $lflag = ( -l 'foo' ); # seems good P2: makes foo a link - uh oh! P1: $lflag or open my $fh, ">>foo"; # does it fine, since $lflag was s +et before P2: remove that link, lickity-split! P1: $lflag = ( -l 'foo' ); # whups, everything *seems* ok...
Make sense? Dave_the_m's code will exactly perform the actions for P2, btw. (Eimi's earlier explanation did exactly what your code does, too - look it over, the -l check happens before and after.)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://480662]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2019-10-15 03:39 GMT
Find Nodes?
    Voting Booth?