Pathologically Eclectic Rubbish Lister | |
PerlMonks |
Re: Re: Re: newbie writing a counterby nardo (Friar) |
on Aug 08, 2001 at 03:49 UTC ( [id://102942]=note: print w/replies, xml ) | Need Help?? |
When the first process is done, it goes to the second
If you're running on an operating system which does not support multitasking, then this statement is correct, but if you're running on any modern OS (Windows 9x/NT, unix) then you can not control when the OS switches to another process. Your operating system, in order to run multiple processes at once, will periodically switch from one process to another (assuming it is a preemptive multitasking OS, you will have no control over when it does this) so after the first process opens the file for writing (thus erasing the contents of the file) you can not ensure that the flock call will occur before another process runs. First process erases file OS switches to second process Second process opens locks and reads in empty file, closes file releasing the lock which allows first process to lock the file OS switches to first process which locks and writes correct count to file First process terminates leaving file with correct count Second process increments empty count to 1 and writes 1 to the file Second process terminates leaving the file with the count of 1 regardless of what it was when process one started.
In Section
Seekers of Perl Wisdom
|
|