2

私はPerl、特にPerl Threadsにまったく慣れていません。私は達成したい:

  1. Thread::queue にデータ (乱数) をキューに入れる 5 つのスレッドを用意する
  2. 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

コードの最適化に関するヘルプは大歓迎です。

4

1 に答える 1