我正在写一个Perl脚本,并注意到我的编辑器突出显示了"锁定"这个词.我很好奇,所以我查看了Perl中的"锁定",并且无法找到一个直截了当的答案(至少没有一个我完全理解的答案).
这是我找到的最佳答案:http: //perldoc.perl.org/functions/lock.html
例如:锁定THING
"在THING中包含的共享变量或引用对象上放置一个建议锁定,直到锁定超出范围."
这到底是什么意思?"锁定"功能不用于锁定文件,因为我读过的所有内容都说使用"flock",所以什么是"锁定"用于?是否与线程有关并确保同时运行的多个进程不会相互碰撞?
它的主要目的是进行多线程处理.它锁定一个共享变量,这样如果任何其他线程尝试lock它,那么该lock调用将阻塞直到它被释放.
为了显示:
#!/usr/bin/perl
use strict;
use warnings;
use threads;
use threads::shared;
my $lock_var : shared;
sub worker_thread {
print threads -> self -> tid(). ": Waiting for lock\n";
lock ( $lock_var );
print threads -> self -> tid(). ": got lock, doing some pretend code\n";
sleep rand(10);
#lock released when out of scope.
}
for ( 1..10 ) {
threads -> create ( \&worker_thread );
}
foreach my $thr ( threads -> list ) {
$thr -> join();
}
Run Code Online (Sandbox Code Playgroud)
您既可以将其用于资源控制,也可以创建互斥,或者您可以使用它来锁定例如哈希,如果您想要更新它而不需要另一个线程同时执行此操作.
你应该注意 - 虽然lock没有强制执行.尽管如此,你仍然可以修改共享变量lock.只有lock函数调用才会测试变量当前是否已解锁.
当你进行变量操作时,使用它很重要lock.read->change->write如果你没有锁定你可以创建竞争条件的任何测试- 你不能确定在读写之间,另一个线程不会做同样的事情.
您可能还想看看Thread::Semaphore哪些类似的东西.