#!/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"