in reply to Things you need to know before programming Perl ithreads
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
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Things you need to know before programming Perl ithreads
by liz (Monsignor) on Aug 31, 2003 at 18:18 UTC |
In Section
Meditations