Thread1- lock($signal); eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm 30; cond_wait($signal); alarm 0; }; if ($@) { print "timed out\n"; }else{ print "did not time out"; } Thread 2; cond_signal($signal);