采用多人买票案例生动形象的解释下无锁数据结构的工作原理

我们用“多人买票”的案例,生动形象地解释无锁数据结构的工作原理


一、传统有锁买票:排队窗口

想象有一个电影院,大家都要买票。

  • 只有一个售票窗口(共享资源),每次只能有一个人买票。
  • 其他人只能在后面排队,等前面的人买完,自己才能买。
  • 如果前面的人挑座位挑很久,后面的人都得干等着。

这就像多线程用锁(lock)保护数据结构:

  • 线程A在操作,线程B、C只能等A操作完才能继续。
  • 线程多了,等待时间长,效率低。

二、无锁买票:自助抢票机

现在电影院换成了很多自助抢票机,每台机器上有一个“抢票按钮”:

  • 每个人都可以同时去任意一台抢票机买票。
  • 每台抢票机的票是有限的,谁先按下“抢票按钮”,谁就买到票。
  • 如果你去的那台机器票已经被别人抢光了,机器会立刻告诉你“没票了”,你可以马上换下一台机器继续抢。
  • 所有人都可以同时操作,不用排队等别人。

这就是无锁数据结构的思想!


三、无锁数据结构的工作原理(结合买票案例)

1. 原子操作(CAS)

  • 每台抢票机的“抢票按钮”就像原子操作(CAS,Compare-And-Swap)。
  • 你按下按钮时,机器会瞬间检查票还在不在,如果在就给你,如果不在就告诉你失败。
  • 这个过程是原子的:要么你抢到票,要么你没抢到,绝不会出现两个人抢到同一张票。

2. 并发安全

  • 多个人可以同时抢票,谁快谁先,不会出现“票被多卖”或“数据错乱”。
  • 没有“锁门排队”的情况,大家都能并发操作。

3. 不阻塞

  • 如果你没抢到票,立刻可以去别的机器继续抢,不用等别人买完。
  • 整个过程没有人被“卡住”,效率极高。

四、对比总结

  • 有锁买票:像一个窗口排队,大家都得等,效率低。
  • 无锁买票:像一群人同时抢自助机,谁快谁先,效率高。

无锁数据结构就是用原子操作(像抢票按钮)来保证数据安全,大家都能同时操作,极大提升多线程环境下的效率!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你一身傲骨怎能输

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值