The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Thread::SharedTreeSet - Shared set of recursive hashes/arrays using serialization

VERSION

0.01

SYNOPSIS

use threads;
use Thread::SharedTree;
use Data::Dumper;

my $h = Thread::SharedTree->new();

threads->create( 'a', $h->{'id'} );
threads->create( 'b', $h->{'id'} );

wait_for_threads();

sub a {
    my $hid = shift;
    my $h = Thread::SharedTree->new( id => $hid );
    $h->set( 'a', { test => 'blah' } );
    $h->ilock('a');
    sleep(4);
    $h->iunlock('a');
}

sub b {
    my $hid = shift;
    my $h = Thread::SharedTree->new( id => $hid );
    sleep(1);
    $h->ilock('a');
    my $data = $h->get('a');
    $h->iunlock('a');
    print Dumper( $data );
}

sub wait_for_threads {
    while( 1 ) {
        my @joinable = threads->list(0);#joinable
        my @running = threads->list(1);#running
        
        for my $thr ( @joinable ) { $thr->join(); }
        last if( !@running );
        sleep(1);
    }
}

DESCRIPTION

Thread::SharedTreeSet makes it possible to share a set of recursive hashes/arrays between threads. Each shared tree set created has a unique scalar identifier that can be used to fetch that same shared tree set from another thread.

LICENSE

Copyright (C) 2013 David Helkowski

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.  You may also can
redistribute it and/or modify it under the terms of the Perl
Artistic License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.