use strict; use warnings; use threads; use Fcntl qw(:flock); open(FILE, ">>/tmp/test.txt"); for(0..9) { threads->new(\&worker, $_); } $_->join for threads->list; sub worker { my $x = shift; flock(FILE, LOCK_EX); print "$x: locked file\n"; sleep(10); flock(FILE, LOCK_UN); print "$x: unlocked file\n"; return; }