[Chicago-talk] A question on threading
me at heyjay.com
me at heyjay.com
Sat Jun 5 17:32:45 CDT 2004
Hi,
I'm getting unpredictable (at least to me) result.
If I run the code below, repeatedly, every so often I get:
[o10]:~> ./thread
Invalid value for shared scalar at ./thread line 25.
A thread exited while 2 threads were running.
the other times it works as expected. I don't see what's
wrong with the code
All I'm trying to do is start a new thread print out a shared value
then stop the thread, and have it stop nicely.
I made an example that demonstrates the problem (should be
cut/paste runnable as is)
[o10]:~> cat ./thread
#!/usr/bin/perl
package Reader;
use 5.008003;
use strict;
use warnings;
use base qw(Class::Accessor);
use threads;
use threads::shared;
__PACKAGE__->mk_accessors( qw/_run _thread/ );
sub start {
my $self = shift;
my $run : shared = 1;
my $t : shared;
$self->_run(\$run);
my $sub = \&loop;
$t = threads->new($sub, $self);
$t->detach;
$self->_thread(\$t);
}
sub stop {
my $self = shift;
${$self->_run} = 0;
${$self->_thread}->join;
}
sub loop {
my $self = shift;
while (${$self->_run}) {
print "running: ", ${$self->_run}, " \n";
}
}
package main;
my $reader = Reader->new();
$reader->start;
$reader->stop;
More information about the Chicago-talk
mailing list