1

リクエストが渡されたときにポート (単純なサ​​ーバー) でリッスンし、URL を解析してスレッドを開始します。

スレッドは共有されているキューに要素を挿入し、挿入中はロックされます。

キューでピークを呼び出すと、要素を取得できません。

use Thread qw(async); 
use Thread::Queue;

 my $DataQueue:shared = new Thread::Queue; 

 $newElement = init($user,$param,$reqest);  # init is method in ElementStructure.pm
 #after creating the element it is passes to subroutine where thread is started

sub updateData
{
    my $iElement=shift;

    $thr = async 
    { 

        {
            lock($DQueue);

            print "---->locked\n";
                    $DQueue->enqueue($iElement);
            insertdata();

        }

        print "lock released\n";

    };
}

sub insertdata
{
     my $count=0;
     while ($DataElement = $DQueue->peek($count) )
     {
    print "-- position $count\n";
    $count++;
     }
}
4

2 に答える 2

2

おそらく問題は、$ DataQueueを1つの場所で使用し、$ DQueueを別の場所で使用することですか?厳格な警告を使用していることを確認してください。

$ iElementがfalse(0など)の場合は、次のように言う必要があります

while ( defined ( my $DataElement = $DQueue->peek($count) ) )

変数名を修正し、updateDataを呼び出すためのコードを挿入すると、すべてがうまくいったように見えました。

于 2010-02-16T06:52:11.863 に答える