Remember, a shared variable is nothing other than an ordinary tied variable, and cloned as any other variable when a thread is started. Whenever a thread accesses the value of a shared variable, its value is copied from the hidden shared variables thread into the thread local copy, and then presented to the outside world as a "normal" variable. Whenever a thread updates a shared variable, the value is updated in the thread local version, as well as in the hidden shared variables thread.use threads; use threads::shared; my $foo : shared; print "outside thread: foo = ".(\$foo)."\n"; threads->new( sub { print "inside thread: foo = ".(\$foo)."\n" } )->jo +in; __END__ outside thread: foo = SCALAR(0x107cc0) inside thread: foo = SCALAR(0x232800)
All of these copy actions should be COWed, ideally.
Hope this made sense.
Liz
In reply to Re: Re: Things you need to know before programming Perl ithreads
by liz
in thread Things you need to know before programming Perl ithreads
by liz
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |