私はPerl、特にPerl Threadsにまったく慣れていません。私は達成したい:
- Thread::queue にデータ (乱数) をキューに入れる 5 つのスレッドを用意する
- Thread::queue からデータをデキューする 3 つのスレッドを用意します。
上記の使命を達成するために私が書いた完全なコード:
#!/usr/bin/perl -w
use strict;
use threads;
use Thread::Queue;
my $queue = new Thread::Queue();
our @Enquing_threads;
our @Dequeuing_threads;
sub buildQueue
{
my $TotalEntry=1000;
while($TotalEntry-- >0)
{
my $query = rand(10000);
$queue->enqueue($query);
print "Enque thread with TID " .threads->tid . " got $query,";
print "Queue Size: " . $queue->pending . "\n";
}
}
sub process_Queue
{
my $query;
while ($query = $queue->dequeue)
{
print "Dequeu thread with TID " .threads->tid . " got $query\n";
}
}
push @Enquing_threads,threads->create(\&buildQueue) for 1..5;
push @Dequeuing_threads,threads->create(\&process_Queue) for 1..3;
私が直面している問題:
- スレッドが期待どおりに同時に実行されていません。
- プログラム全体が異常終了し、次のコンソール出力が表示されます。
Perl がアクティブなスレッドで終了しました: 8 つの実行中および結合されていないスレッド
0 finished and unjoined 0 running and detached Enque thread with TID 5 got 6646.13585023883,Queue Size: 595 Enque thread with TID 1 got 3573.84104215917,Queue Size: 595
コードの最適化に関するヘルプは大歓迎です。