channel Lock

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

  1. go(function (){
  2. //加锁
  3. $result = \EasySwoole\Component\ChannelLock::getInstance()->lock('a');
  4. var_dump($result);
  5. co::sleep(1);
  6. //解锁
  7. $result = \EasySwoole\Component\ChannelLock::getInstance()->unlock('a');
  8. var_dump($result);
  9. });

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为永久不超时