sub run { my $self = Foo->new(@_); my $id = $self->{id}; ... print "Hello from thread $id.\n"; lock($aryItems[$id]); print "Item $aryItems[$id]\n"; delete $aryItems[$id]; # The lock is removed once when the function returns return 1; }