Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Re: Things you need to know before programming Perl ithreads

by liz (Monsignor)
on Apr 08, 2004 at 21:08 UTC ( #343759=note: print w/ replies, xml ) Need Help??


in reply to Re: Things you need to know before programming Perl ithreads
in thread Things you need to know before programming Perl ithreads

Actually, it would have been more correct to remove "shared" in this context. A non-shared variable is cloned when a thread is started. However, a shared variable is also cloned.

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)
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.

All of these copy actions should be COWed, ideally.

Hope this made sense.

Liz


Comment on Re: Re: Things you need to know before programming Perl ithreads
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://343759]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2014-04-18 03:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (461 votes), past polls