这个问题实际上来自使用线程。我们知道,在 perl 线程中,我们有一个名为 lock 的函数,并且根据 cpan http://perldoc.perl.org/threads/shared.html: lock 在变量上放置一个咨询锁,直到锁超出范围。好的,如果我们这样写:
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 "if" 语句添加一个块,然后 lock($obj) 可能只是第 2 行,请参阅我的 #comments
这个问题实际上得到了回答,但我想补充一些发现:
我发现无论你怎么写:
lock($ojb) if threads::shared::is_shared($obj);
或者
if (threads::shared::is_shared($obj)) {
lock($ojb);
}
锁的范围是相同的——整个 foo() 子例程。