在Spinklock中分布式锁的概念

如大家所了解的,锁 = 资源 + 并发控制以我们熟悉的单机锁为例:Spinlock(自旋锁) = BOOL + CAS (乐观锁)Mutex (互斥锁) = BOOL + CAS + 通知 (悲观锁)Spinlock和Mutex所持有的锁是一个互斥量,这个互斥量通常被实现为一个整数值,通过原子操作来控制它的状态。

在 Spinklock 中,线程会循环检查互斥量的状态,直到它处于可用状态。而在 mutex 中,线程会通过系统调用处于阻塞状态,直到互斥量可用才被唤醒。 Spinlock 通过原子的 CAS 指令:当一个线程需要访问共享资源时,它会检查一个标志位,如果标志位为 0 ,则线程可以获取锁,并将标志位设置为 1 。

如果标志位为 1 ,表示锁已经被其他线程占用,当前线程只有一直循环等待,直到它能够成功地将标志位设置 1 。例如 AtomicInteger ,也是通过资源(Interger)+ CAS ,但是不会明确地提示所有权,因此不会被视为一种锁。

如上图所示,任何提供三个特性的服务都可以提供分布式锁的能力,资源可以是文件或者键值对等,通过创建文件,创建键值对等原子操作,通过创建成功的结果来表明所有权的归属,同时通过TTL或者会话来保证锁的可用性。

相关推荐
此时不提桶,更待何时4 小时前
06-16-B-Kafka面试与生产事故实战
分布式·面试·kafka
mesyinjinghan4 小时前
半导体 MES 与 ERP 的接口边界:六类单据该留在哪一层
分布式·eap·半导体mes
codigger4 小时前
Redis 正式接入 AI:当"最懂速度的数据库"开始解决"记忆问题"
redis·分布式·后端·ai·向量检索
樱花落木兰6 小时前
Redisson 可重入分布式锁底层原理详解
分布式
此时不提桶,更待何时1 天前
06-12-A-Kafka存储深水区与源码解析详解
分布式·kafka·linq
此时不提桶,更待何时1 天前
06-15-A-Kafka生态集成与流处理详解
分布式·kafka
此时不提桶,更待何时1 天前
06-13-A-Kafka客户端与协议深入详解
分布式·kafka
程序猿乐锅2 天前
从0-1一文详解RabbitMQ
java·分布式·后端·中间件·rabbitmq·ruby
老陈说编程2 天前
1. 鸿蒙 (HarmonyOS) 2012 至 2026 年的发展历程
分布式·华为·个人开发·harmonyos·鸿蒙·鸿蒙系统·程序员创富