#!/usr/bin/perl; use Time::HiRes qw(usleep); use strict; use warnings; use gthreads; use gerr qw(error); gthreads::createhash('test','num'); #gthreads::write('test','num',0); sub tt { $SIG{'__DIE__'} = sub { error($!) }; my ($id) = @_; #print "Thread $id\n"; #usleep(int rand(100000)); #gthreads::lock('test','num'); #my $dat=gthreads::read('test','num'); #$dat++; #gthreads::write('test','num',$dat); gthreads::writeindex('test','num',$id,'A'); #gthreads::unlock('test','num'); #print "T$id -> $dat\n"; usleep(int rand(100)); #gthreads::lock('test','num'); #$dat=gthreads::read('test','num'); #$dat--; #gthreads::write('test','num',$dat); #gthreads::unlock('test','num'); gthreads::writeindex('test','num',$id,'B'); #print "T$id -> $dat\n"; my $rt=gthreads::done($id); #print "Runned $id for $rt\n" } for (my $i=1;$i<=100;$i++) { #usleep(int rand(10000)); #print "Starting thread $i\n"; gthreads::start('test',\&tt) } while (gthreads::running()) { my $rn=gthreads::running(); print "Still running $rn\n"; usleep(10000); } my $num=gthreads::read('test','num'); my @a=(); foreach my $b (keys %$num) { push @a,$num->{$b} }; print "Final number is ", join(", ",@a), "\n"; my $nd=gthreads::numdata('test','num'); print "Numdata = $nd\n"; print "All done.\n"