#!/usr/bin/perl -w use strict; use IPC::SysV qw(IPC_PRIVATE S_IRWXU IPC_CREAT); use IPC::Semaphore; srand; my $sem = new IPC::Semaphore( 1234, 1, S_IRWXU | IPC_CREAT ); my $semval = $sem->getval(0); $semval = 0 unless ( defined($semval) ); exit(0) if ( $semval >= 10 ); $sem->setval( 0, ( $semval + 1 ) ); # # Do work... or in this case, # print the value of $semval and sleep for a while # print $semval + 1, "\n"; sleep( int( rand(20) + 1 ) ); # # Decrement the semaphore value # $semval = $sem->getval(0); if ($semval) { $sem->setval( 0, ( $semval - 1 ) ); } else { $sem->remove; } __END__ # # Sample test execution (in bash): # # index=30 # while [ $index -gt 0 ] # do # perl test.pl & # sleep 1 # let "index=index-1" # done #