Я пытаюсь разделить многомерный хэш на несколько потоков.
Этот хэш содержит 2 подключенные пары ключей, мне нужно знать, если они уже подключены, если нет, мне нужно подключить их, если нет, нет необходимости переходить в базу данных.
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 :: shared, позволяющими вам использовать общий уровень общей структуры.
Как бы я смог проверить, используется ли эта комбинация в нескольких потоках?