在 Lock::Async 中§

请参阅方法 unlock的上下文中的主要文档 in context

method unlock(Lock::Async:D: --> Nil)

释放锁。如果有任何未完成的 lock Promise,队列头部的那个将被保留,并且可能在线程池上安排代码(因此调用 unlock 的成本仅限于安排另一段想要获取锁的代码所需的工作,而不是执行该代码)。

my $l = Lock::Async.new;
await $l.lock;
$l.unlock;

最好使用 protect 而不是显式调用 lockunlock。但是,如果希望分别使用这些方法,最好使用 LEAVE 块来确保可靠地调用 unlock。未能 unlock 将意味着没有人能够再次 lock 此特定 Lock::Async 实例。

my $l = Lock::Async.new;
{
    await $l.lock;
    LEAVE $l.unlock;
}

在 Lock 中§

请参阅方法 unlock的上下文中的主要文档 in context

method unlock(Lock:D:)

释放锁。

my $l = Lock.new;
$l.lock;
$l.unlock;

务必确保始终释放 Lock,即使抛出异常也是如此。确保这一点的最安全方法是使用 protect 方法,而不是显式调用 lockunlock。如果没有,请使用 LEAVE 移相器。

my $l = Lock.new;
{
    $l.lock;
    LEAVE $l.unlock;
}

在 IO::CatHandle 中§

请参阅方法 unlock的上下文中的主要文档 in context

method unlock(IO::CatHandle:D:)

IO::Handle.unlock 相同。如果 源句柄队列已耗尽,则返回 Nil

仅解锁当前活动的源句柄。 .on-switch Callable 可用于在 CatHandle 处理句柄时方便地锁定/解锁句柄。

在 IO::Handle 中§

请参阅方法 unlock的上下文中的主要文档 in context

method unlock(IO::Handle:D: --> True)

从文件句柄中删除 lock。如果不可能,它将返回 True 或引发异常。