Pei*_* Li 4 perl multithreading locking
这个问题实际上来自于使用线程.我们知道在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 }
Run Code Online (Sandbox Code Playgroud)
所以锁的范围是从第2行到第4行还是第2行?如果"if"语句向其添加一个块,那么lock($ obj)可能只是第2行,请参阅我的#comments
问题实际上得到了回答,但我想补充一些发现:
我发现无论你怎么写:
lock($ojb) if threads::shared::is_shared($obj);
Run Code Online (Sandbox Code Playgroud)
要么
if (threads::shared::is_shared($obj)) {
lock($ojb);
}
Run Code Online (Sandbox Code Playgroud)
锁的范围是相同的 - 整个foo()子例程.