in reply to Re: Slow worker threads
in thread Slow worker threads
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 ?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Slow worker threads
by spx2 (Deacon) on Jul 18, 2009 at 19:20 UTC |