1

私の疑似コードは次のようになります。

#!/usr/local/bin/perl5.8.8
use warnings;
use strict;

use threads;
use threads::shared;

sub tasker;

my @allThreads = ();
my @array = ('alpha','beta','gamma');
push @allThreads, threads->new(\&tasker, @array);
$_->join foreach @allThreads;

sub tasker{
    my @localArray = @_;

    ...call some other modules/functions...

}

スレッドの実行中、STDOUT で数秒後に次のメッセージが表示されます。

Still here!
Still here!
Still here!

その後、スレッドは正常に参加 (完了) します。これらがどこから来ているのか、なぜ一部の @array にしか表示されないのかはわかりません。言及すべきポイントは、これらのメッセージの数が @array の要素と等しいということです。

専門家からの助けに感謝します。

4

1 に答える 1

1

コード (または使用しているモジュールの 1 つ) に、デバッグ コードが残っているようです。それを見つけるには、追加します

INIT { print "$0\n"; print "$_\n" for values %INC; exit }

あなたのスクリプトに。出力をパイプして

xargs grep 'Still here!'

次に、デバッグ コードを削除します。

PS -warn末尾に改行を付けずに使用すると、デバッグ メッセージにファイル名と行番号が付加されます。これは便利です:)

于 2012-06-19T14:09:54.810 に答える