私は元々、Thread::Queue を介してハッシュ オブジェクトを送信しようとして実験しましたが、このリンクによると、私のバージョンの Thread::Queue と threads::shared は古すぎます。残念ながら、私がテストしているシステムは私のものではないため、アップグレードできません。
次に、共通の配列を使用してハッシュを保存しようとしました。これまでのコードは次のとおりです。
#!/usr/bin/perl
use strict;
use warnings;
use threads;
use Thread::Queue;
use constant NUM_WORKERS => 10;
my @out_array;
test1();
sub test1
{
my $in_queue = Thread::Queue->new();
foreach (1..NUM_WORKERS) {
async {
while (my $job = $in_queue->dequeue()) {
test2($job);
}
};
}
my @sentiments = ("Axe Murderer", "Mauler", "Babyface", "Dragon");
$in_queue->enqueue(@sentiments);
$in_queue->enqueue(undef) for 1..NUM_WORKERS;
$_->join() for threads->list();
foreach my $element (@out_array) {
print "element: $element\n";
}
}
sub test2
{
my $string = $_[0];
my %hash = (Skeleton => $string);
push @out_array, \%hash;
}
ただし、プロシージャの最後では、@out_array
常に空です。スクリプトのスレッド部分を削除すると、@out_array
正しく入力されます。ここでスレッド化を間違って実装していると思われます。
この場合、どうすれば正しく入力でき@out_array
ますか?