use strict; use Thread::Queue; use Benchmark; # this part works fine my $queue = Thread::Queue->new(); timethis(1000, sub{$queue->enqueue(1);}); timethis(1000, sub{$queue->dequeue();}); # this part gets stuck. # but works fine if I change dequeue() to dequeue_nb() my $queue2 = Thread::Queue->new(); timethese(1000, {'Push'=>sub{$queue2->enqueue(1);}, 'Pop'=>sub{$queue2->dequeue();} } );