2014-12-04 41 views
0

我無法得到想要的結果。我想在單獨的線程中執行子例程my_fun。但是$ meterId不會改變。例如,如果我執行3線程,那麼$ meterId是同樣喜歡OSE123,OSE123,OSE123通過並行執行一個子程序:: ForkManager

use Parallel::ForkManager; 
my $max_procs = 3; 
my $pm = Parallel::ForkManager->new($max_procs); 

NAMES:for (my $i= 0 ;$i <=$ENV{'NO_OF_CUSTOMER'};$i++) 
{ 
my $pid = $pm->start() and next NAMES; 
my_fun(); 

$pm->finish(); # pass an exit code to finish 

} 

sub my_fun() 

{ 


$meterId='OSE-'.int (rand(10000000)); 
lock($meterId); 
chomp (my $timeCheck=`date +%H`); 
my $cmdOut= $testCaseObj->preprovisionAccount ("CUS_P_EUR_STD","ACCEUR_STD", "$meterId", "P_EUR_STD", "GEN" , "EUR","DPL"); 
my ($topLAcc,$subId,$cusId) = $testCaseObj->getAccountDetails($cmdOut); 
$testCaseObj->updateLogTable("$cusId","$topLAcc","$subId","$meterId"); 

} 
$pm->wait_all_children; 
+0

['lock'(http://perldoc.perl.org/functions/lock.html)_...如果你不是下::共享這確實nothing._ – 2014-12-04 06:24:55

+0

而且使用線程, P :: FM創建進程,而不是線程。 – ikegami 2014-12-04 14:32:03

回答

1

當你fork一個過程,它使程序的副本。這包括生成的隨機數的種子。您需要在子進程中使用change the seed

my $pid = $pm->start() and next; 

srand(); 
my_fun(); 

$pm->finish();