它的主要目的是多線程。它鎖定一個共享變量,如果其他線程嘗試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();
}
您可以使用它的資源控制,以創建互斥,或者你可以用它來鎖定例如當你想在沒有另一個線程同時進行更新時使用散列。
雖然您應該注意 - lock
未執行。儘管有lock
,您仍然可以修改共享變量。只有lock
函數調用纔會測試變量當前是否已解鎖。
當您進行可變操作時,使用lock
很重要。任何測試,如果你不鎖定你可以創建競爭條件 - 你不能確定在讀寫之間,另一個線程不會做同樣的事情。
你可能也想看看Thread::Semaphore
它做了類似的事情。
請參閱[此主題](http://www.perlmonks.org/?node_id=579444)瞭解一些信息 – Andrei 2014-08-29 16:29:42