Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
Perl Monk, Perl Meditation
 
PerlMonks  

advisory lock status when calling a function, with use strict

by ISAI student (Scribe)
on Jan 01, 2013 at 07:07 UTC ( #1011122=perlquestion: print w/ replies, xml ) Need Help??
ISAI student has asked for the wisdom of the Perl Monks concerning the following question:

Hello all. I am trying to do the following: I have a shared hash, namely %hash1 I initiate a lock. The I call for a function on a particular key, and assign the function value to the key. Is the lock still on? I could not find an answer to it, and the documentation I have found on perldoc does not cover that angle.

See code:
use strict ; use threads ; use threads::shared ; my %hash1 =(1,2, 3,4) ; { lock (%hash1) ; $hash1{1} = foo ($hash1{1}); $hash1{3} = foo ($hash1{3}) }

My question is: Is the advisory lock active when $hash{3} is accessed and assigned, or is calling foo removes the lock (because of use strict and the scoping limitation? )Trying to test it may be tricky, and I am not sure if I know how to cover most angles. Using foo to lock the variable is useless, and passing it a reference to the hash, and then locking, may cause deadlocks.

Comment on advisory lock status when calling a function, with use strict
Download Code
Re: advisory lock status when calling a function, with use strict
by Anonymous Monk on Jan 01, 2013 at 07:21 UTC

    I don't know anything about lock, but I do know that there is no way strict would have anything to do with lock

    In the code you've shown you only have the main thread, so lock is irrelevant

    Yes, the lock is still on for the duration of the scope, the documentation is clear about this , threads::shared#lock

      After reading for the 10th time, I have the answer (although not a direct one): "calls to lock by the same thread from within dynamically nested scopes are safe -- the variable will remain locked until the outermost lock on the variable goes out of scope." The answer is yes.
Re: advisory lock status when calling a function, with use strict
by mhearse (Hermit) on Jan 01, 2013 at 17:48 UTC

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (7)
As of 2014-04-16 11:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (424 votes), past polls