in reply to How to share huge data structure between threads?

My problem is that threads::shared can't share complex data structures and objects. How can this be solved?
I don't advocate this solution nor am I proud of it, but ...
use threads; use threads::shared; use Devel::Pointer; { package foo; sub new { bless [rand 100] } sub blah { print "in blah()\n" } } my $obj = foo->new(); $obj->blah(); print "$obj: @$obj\n"; my $o : shared = address_of($obj); $t = threads->new(sub { print "\tin thread\n\t"; my $obj2 = deref($o); $obj2->blah(); print "\t$obj2: @$obj2\n"; }); $t->join; __output__ in blah() foo=ARRAY(0x804beec): 43.5769482822256 in thread in blah() foo=ARRAY(0x804beec): 43.5769482822256
Now just look into the little memory-wiping stick ... *flash*.
HTH

_________
broquaint

Replies are listed 'Best First'.
Re:^2 How to share huge data structure between threads?
by ph0enix (Friar) on Jan 14, 2003 at 11:51 UTC

    Looks interesting, but if $obj goes out of scope created object will be destroyed (reference counter is zero and so variable can be garbage collected) and can't be restored from stored address. This occurs eg. if variable is created in one thread and should be used in other one.