liz++, thanks.
I got curious about how closures would do, so I tried your technique to see what happens (perl 5.8.1-RC2),
so the object of the closure is duplicated - you did say everything, but I had to check.use threads(); { my $foo = 'bar'; sub foo () :lvalue { $foo } } threads->new( sub { foo = 'quux'; print 'thread: coderef = ', \&foo, $/; print 'foo is ', foo, $/; } )->join; print 'main: coderef = ', \&foo, $/; print 'foo is ', foo, $/; __END__ $ perl thrcl.pl thread: coderef = CODE(0x8129538) foo is quux main: coderef = CODE(0x8060674) foo is bar
Now, what if I want all threads to see the same thing?
so both foo()'s point to the same cloistered object.use threads(); use threads::shared; { my $foo :shared = 'bar'; sub foo () :lvalue { $foo } } threads->new( sub { foo = 'quux'; print 'thread: coderef = ', \&foo, $/; print 'foo is ', foo, $/; } )->join; print 'main: coderef = ', \&foo, $/; print 'foo is ', foo, $/; __END__ $ perl thrcl.pl thread: coderef = CODE(0x8163924) foo is quux main: coderef = CODE(0x80fe448) foo is quux
Trying to stick the :shared attribute on sub foo did no good. I expected it to prevent duplication of the code, but perl smacked me down with,
I suspect I need to read some more of the fine manual.$ perl thrcl.pl Invalid CODE attribute: shared at thrcl.pl line 5 BEGIN failed--compilation aborted at thrcl.pl line 5.
After Compline,
Zaxo
In reply to Re: Things you need to know before programming Perl ithreads
by Zaxo
in thread Things you need to know before programming Perl ithreads
by liz
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |