如大家所了解的锁 资源 并发控制以我们熟悉的单机锁为例Spinlock自旋锁 BOOL CAS 乐观锁Mutex 互斥锁 BOOL CAS 通知 悲观锁Spinlock和Mutex所持有的锁是一个互斥量这个互斥量通常被实现为一个整数值通过原子操作来控制它的状态。在 Spinklock 中线程会循环检查互斥量的状态直到它处于可用状态。而在 mutex 中线程会通过系统调用处于阻塞状态直到互斥量可用才被唤醒。 Spinlock 通过原子的 CAS 指令当一个线程需要访问共享资源时它会检查一个标志位如果标志位为 0 则线程可以获取锁并将标志位设置为 1 。如果标志位为 1 表示锁已经被其他线程占用当前线程只有一直循环等待直到它能够成功地将标志位设置 1 。例如 AtomicInteger 也是通过资源Interger CAS 但是不会明确地提示所有权因此不会被视为一种锁。如上图所示任何提供三个特性的服务都可以提供分布式锁的能力资源可以是文件或者键值对等通过创建文件创建键值对等原子操作通过创建成功的结果来表明所有权的归属同时通过TTL或者会话来保证锁的可用性。