Lock

1.6.4版本增加了锁的实现。PHP代码中可以很方便地创建一个锁,用来实现数据同步。Lock类支持5种锁的类型:

  • 文件锁 SWOOLE_FILELOCK
  • 读写锁 SWOOLE_RWLOCK
  • 信号量 SWOOLE_SEM
  • 互斥锁 SWOOLE_MUTEX
  • 自旋锁 SWOOLE_SPINLOCK
    注意:请勿在onReceive等回调函数中创建锁,否则底层的GlobalMemory内存会持续增长,造成内存泄漏。

示例:

  1. $lock = new swoole_lock(SWOOLE_MUTEX);
  2. echo "[Master]create lock\n";
  3. $lock->lock();
  4. if (pcntl_fork() > 0)
  5. {
  6. sleep(1);
  7. $lock->unlock();
  8. }
  9. else
  10. {
  11. echo "[Child] Wait Lock\n";
  12. $lock->lock();
  13. echo "[Child] Get Lock\n";
  14. $lock->unlock();
  15. exit("[Child] exit\n");
  16. }
  17. echo "[Master]release lock\n";
  18. unset($lock);
  19. sleep(1);
  20. echo "[Master]exit\n";