#!/usr/bin/perl use utf8; use feature qw( say ); use threads; use threads::shared; use Data::Dumper; use Storable qw ( freeze thaw ); my $LockVar :shared; $LockVar = "default"; my $LockArray :shared; $Lock3Sec = threads->new( {'void' => 'void'}, sub { { say "the lock var default value is {$LockVar}"; lock($LockVar) or warn "cannot lock the var because {$!}\n"; sleep 3; say $LockVar; } }, ); $Lock3Sec->detach(); $TryToReadLockVar = threads->new( {'void' => 'void'}, sub { my $count = 1; while( $LockVar eq 'default'){ say "try to modify the Lock var {$count} time"; $count += 1; $LockVar = 'this lock var has been change' or redo; } }, ); $TryToReadLockVar->join(); #### the lock var default value is {default} try to modify the Lock var {1} time