この質問は、実際にはスレッドの使用から来ています。perlスレッドにはlockという関数があり、cpan http://perldoc.perl.org/threads/shared.htmlによると:lockは、ロックがスコープ外になるまで変数にアドバイザリロックを設定します。OK、次のように書くとどうなりますか?
1 sub foo{
2 lock($obj) if threads::shared::is_shared($obj); #equivalent to if(threads::shared::is_shared($obj)) {lock($obj);} ?
3 ... rest of the code
4 ... more code
5 }
したがって、ロックの範囲は2行目から4行目までですか、それとも2行目だけですか。「if」ステートメントにブロックを追加する場合は、lock($ obj)が2行目である可能性があります。#commentsを参照してください。
質問は実際に答えられますが、私はいくつかの発見を追加したいと思います:
あなたがどのように書いても、私はそれを見つけました:
lock($ojb) if threads::shared::is_shared($obj);
また
if (threads::shared::is_shared($obj)) {
lock($ojb);
}
ロックの範囲は同じです-foo()サブルーチン全体。