1*f2a19305Safresh1#!/usr/bin/perl 2*f2a19305Safresh1 3*f2a19305Safresh1use strict; 4*f2a19305Safresh1use warnings; 5*f2a19305Safresh1 6*f2a19305Safresh1use threads; 7*f2a19305Safresh1use Thread::Semaphore; 8*f2a19305Safresh1 9*f2a19305Safresh1MAIN: 10*f2a19305Safresh1{ 11*f2a19305Safresh1 # Create semaphore with count of 0 12*f2a19305Safresh1 my $s = Thread::Semaphore->new(0); 13*f2a19305Safresh1 14*f2a19305Safresh1 # Create detached thread 15*f2a19305Safresh1 threads->create(sub { 16*f2a19305Safresh1 # Thread is blocked until released by main 17*f2a19305Safresh1 $s->down(); 18*f2a19305Safresh1 19*f2a19305Safresh1 # Thread does work 20*f2a19305Safresh1 # ... 21*f2a19305Safresh1 22*f2a19305Safresh1 # Tell main that thread is finished 23*f2a19305Safresh1 $s->up(); 24*f2a19305Safresh1 })->detach(); 25*f2a19305Safresh1 26*f2a19305Safresh1 # Release thread to do work 27*f2a19305Safresh1 $s->up(); 28*f2a19305Safresh1 29*f2a19305Safresh1 # Wait for thread to finish 30*f2a19305Safresh1 $s->down(); 31*f2a19305Safresh1} 32*f2a19305Safresh1 33*f2a19305Safresh1exit(0); 34*f2a19305Safresh1 35*f2a19305Safresh1# EOF 36