0

$self をスレッド キューに入れようとすると問題が発生します。Perl は CODE ref について不平を言います。オブジェクト インスタンスをスレッド キューに入れることはできますか?

generic.pm (Superclass)

package Things::Generic;

use Thread::Queue;
use threads;

our $work_queue = new Thread::Queue;
our $result_queue = new Thread::Queue;

my @worker_pool = map { threads->create (\&delegate_task, $work_queue, $result_queue) } 1 .. $MAX_THREADS;

sub delegate_task {
    my( $Qwork, $Qresults ) = @_;
    while( my $work = $Qwork->dequeue ) {
            #The item on the queue contains "self" taht was passed in, 
            #  so call it's do_work method

            $work->do_work();
            $Qresults->enqueue( "lol" );
    }

    $Qresults->enqueue( undef ); ## Signal this thread is finished
}

sub new {
    my $class = shift;

    my $self = {
            _options => shift,
    };

    bless $self, $class;
    return $self;
}
.
.
.
#other instance methods

#

object.pm (Subclass)
package Things::Specific;

use base qw ( Things::Generic )

sub new {
        my $class = shift;
        my $self = $class->SUPER::new(@_);

        return $self;
}

sub do_stuff {
     my $self = shift;
     $Things::Generic::work_queue->enqueue($self);
}

sub do_work {
     print "DOING WORK\n";
}
4

2 に答える 2

2

問題があるのはオブジェクトではありません。その中にコード参照があります。それは不合理ではありません。オブジェクトをコード参照と共有しようとしているのはなぜですか? コードではなく、スレッド間でデータを共有する必要があります。

于 2013-06-28T00:27:54.787 に答える