Let's consider NONBLOCKING flock , there's something really wrong going on :
use strict; use warnings; use threads; use feature 'say' ; use Fcntl qw(:flock); open(FILE, ">>/tmp/test.txt"); for(0..9) { threads->new(\&worker, $_); } $_->join for threads->list; sub worker { my $x = shift; my $locked; $locked = flock(FILE, LOCK_EX|LOCK_NB ); if( $locked ) { say "$x: lock acquired"; sleep 4; } else { say "$x: cannot acquire lock"; } flock( FILE, LOCK_UN ); print "$x: lock released\n"; return; }
0: lock acquired 1: lock acquired 2: lock acquired 3: lock acquired 4: lock acquired 5: lock acquired 6: lock acquired 7: lock acquired 8: lock acquired 9: lock acquired 0: lock released 1: lock released 2: lock released 3: lock released 4: lock released 5: lock released 6: lock released 7: lock released 8: lock released 9: lock released
How come the lock is acquired again and again without being released anywhere in between ?!
Isn't this what a lock is supposed to do ? Lock something and not give access to anyone else until released ?
In reply to Re^2: Slow worker threads
by spx2
in thread Slow worker threads
by pome23
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |