# SpinLock 自旋锁 前面讲到 LightCache 轻量缓存在特定的情况下为了保证数据不被多进程的因素导致丢失或覆盖,在高并发情况下修改数据需要加锁,所以炸毛框架内置了 SpinLock 自旋锁。 ## 配置 自旋锁使用无需配置,和 LightCache 同源。 ## 使用 定义:`ZM\Store\Lock\SpinLock` ### SpinLock::lock($key) 给信号量 `$key` 上锁。如果该信号量已经被上锁,则原地等待直到其他资源释放锁。 ```php SpinLock::lock("foo"); ``` ### SpinLock::unlock($key) 给信号量 `$key` 释放锁。 ```php SpinLock::unlock("foo"); ``` ### SpinLock::tryLock($key) 给信号量 `$key` 上锁。如果该信号量已经被上锁,则立刻返回 false。 ```php SpinLock::lock("foo"); ``` ## 综合实例 我们这里以之前在 LightCache 中的实例进行继续讲解,如何给之前那样的情况加锁: ```php /** * @RequestMapping("/test") */ public function test() { SpinLock::lock("web_count"); // 加上这行 $s = LightCache::get("web_count"); if($s === null) $s = 1; else $s += 1; LightCache::set("web_count", $s); SpinLock::unlock("web_count"); // 再加上这行 return "