#!/usr/bin/perl -l use warnings; use strict; use Fcntl ':flock'; use threads; use Thread::Queue; #use myClass; { package myClass; sub new{ bless {}, $_[0] } sub getRandom{ int rand 1000 } } my $q = Thread::Queue->new(); open(FILE,"database.txt") or die $!; open(FILE2,">>CON") or die $!; $q->enqueue($_) while(); ### Cause the threads to terminate!!! $q->enqueue( (undef) x 10 ); for(0 .. 9) { threads->new(\&worker, $q); } $_->join for threads->list; sub worker { my $queue = shift; while( my $item = $queue->dequeue) { chomp($item); my $p = myClass->new(); my $physics = $p->getRandom(); flock(FILE2,LOCK_EX); print FILE2 "$item|$physics"; print "$item|$physics"; flock(FILE2,LOCK_UN); } return; }