channel Lock

命名空间:\EasySwoole\Component\ChannelLock.
ChannelLock 通过协程channel特性实现了关于协程级的锁机制.

go(function (){
    //加锁
    $result = \EasySwoole\Component\ChannelLock::getInstance()->lock('a');
    var_dump($result);
    co::sleep(1);
    //解锁
    $result = \EasySwoole\Component\ChannelLock::getInstance()->unlock('a');
    var_dump($result);
});

lock

尝试锁住$lockName. 方法原型: function lock(string $lockName,float $timeout = -1):bool 参数介绍:

  • $lockName 锁名
  • $timeout 超时时间,-1为永久不超时 当调用此函数后,会尝试锁住$lockName,成功将返回true,如果之前已经有其他协程锁住了此$lockName,将会阻塞,直到超时返回false(-1用不超时,代表永远阻塞)

unlock

解锁
方法原型: function unlock(string $lockName,float $timeout = -1):bool 参数介绍:

  • $lockName 锁名
  • $timeout 超时时间,-1为永久不超时 解锁$lockName. 成功后将返回true.

deferLock

尝试锁住$lockName,并在协程结束后自动解锁.
方法原型: deferLock(string $lockName,float $timeout = -1):bool

参数介绍:

  • $lockName 锁名
  • $timeout 超时时间,-1为永久不超时