my $c;
while( sleep 1 ) {
print "timer event";
$c = scalar keys %results;
last if $c;
}
pp $c;
####
$ perl5.14.1 x.pl
timer event
15466
$ perl5.14.1 x.pl
timer event
timer event
436817
$ perl5.14.1 x.pl
timer event
timer event
445051
$ perl5.14.1 x.pl
timer event
timer event
499204
####
#! perl -lw
use strict;
use bignum;
use threads;
use threads::shared;
use Data::Dump qw[ pp ];
my %results :shared;
async {
my %comps;
for my $i ( 1 .. 1e6 ) {
$comps{ $i } = $i ** $i;
}
lock(%results);
%results = %comps;
}->detach;
my $c;
while( sleep 1 ) {
print "timer event";
$c = do {
lock(%results);
scalar keys %results;
};
last if $c;
}
pp $c;
####
my %results :shared;
my $done :shared;
async {
my %comps;
for my $i ( 1 .. 1e6 ) {
$comps{ $i } = $i ** $i;
}
%results = %comps;
$done++; # using $done = 1 doesn't want to work - more thought required!
}->detach;
my $c;
while( sleep 1 ) {
print "timer event";
last if $done;
}
pp scalar keys %results;