use IPC::SysV qw/SEM_UNDO IPC_CREAT ftok/ ; use IPC::Semaphore ; # start script $flags = PERMISSIONS ; $sem = new IPC::Semaphore(ftok($0, 0), 1, $flags) ; unless($sem) { # we must be the first one $sem = new IPC::Semaphore($id, 1, $flags | IPC_CREAT) $sem->setval(0, 100) ; } ## ## Decrement the #0 semaphore by 1 ## $sem->op(0, -1, SEM_UNDO) ; # blocks if semaphore is zero # # DO SCRIPT STUFF # ## ## Increment #0 semaphore by 1 ## $sem->op(0, 1, SEM_UNDO) ; # once past this point, any script waiting can proceed # done