my $thr = threads->create(\&function); $thr->join; sub function { } #### use threads; use threads::shared; use Thread::Semaphore; my $init = 0; my $sem:shared; $sem = new Thread::Semaphore($init); my $thr = threads->new(\& process ); $sem->down; sub process { lock($sem); $sem->up ; return; }