【发布时间】:2011-04-11 17:58:50
【问题描述】:
我正在尝试在多个线程上共享多维散列。 这个hash包含2个连接的key-pairs,我需要知道它们是否已经连接,如果没有,我需要连接它们,如果没有,不需要去数据库。
use threads;
use threads::shared;
my %FLUobject2param : shared = ();
#Start a new thread for every available processor
for (my $i=0;$i<$PROCESSORS;$i++) {
threads->new(\&handlethread);
}
#Catch if these threads end
foreach my $onthr (threads->list()) {
$onthr->join();
}
sub handlethread{
...
if(not defined $FLUobject2param{$objectID}{$paramID}){
$dbh->getObject2Param($objectID,$paramID);
$FLUobject2param{$objectID}{$paramID} = 1;
}
}
我不断收到错误 Invalid value for shared scalar 在线 if(not defined $FLUobject2param{$objectID}{$paramID}){
这显然与 perl 的 threads::shared 有关,它只允许您共享单级共享结构。
我如何才能检查此组合是否已用于多个线程?
【问题讨论】:
标签: multithreading perl hash share multidimensional-array