在Spinklock中分布式锁的概念

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

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

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

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

相关推荐
会周易的程序员4 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
青山木16 小时前
RocketMQ 入门到原理(一):整体架构与消息的生命周期
java·分布式·后端·中间件·架构·rocketmq
lisanmengmeng1 天前
分布式追踪与监控:Skywalking介绍(一)
分布式·skywalking
HanhahnaH1 天前
Redis单线程和Tair多线程架构设计对比
分布式·缓存
rustfs1 天前
MinIO 国产开源平替正式 GA
分布式·docker·云原生·rust
螺蛳粉 螺蛳粉1 天前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
孙启超1 天前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust
九皇叔叔2 天前
Seata——把分布式事务理论落到 Java 微服务实践
分布式·分布式事务·cap·base·saga
程序员黎剑2 天前
RabbitMQ-消息可靠性-publisher-confirm持久化与手动ack
分布式·rabbitmq·ruby