news 2026/5/13 1:01:19

乐观锁算线程同步吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
乐观锁算线程同步吗?

悲观锁是查询时加锁,然后下面的流程锁住,别的线程不可以访问,当前面的线程完成后释放锁,这是让线程同步了。那乐观锁,算同步吗,因为两个线程还是可以同时查询,只是修改时,version不对的会被打回?

算同步,但它是"不堵门的同步"。

你的观察非常准确——这是理解两种锁本质区别的关键。


同步 ≠ 必须阻塞等待

同步的本质是:协调多个线程对共享资源的访问,保证最终结果正确。

至于怎么协调,有两种思路:

悲观锁乐观锁
策略先假设会冲突,提前堵门先假设不会冲突,事后检查
协调方式阻塞式同步— 没轮到的线程挂起等待非阻塞式同步— 失败的线程自己重试或放弃
线程体验"都给我排队,一个一个来""你们都去试,撞车了自行解决"

为什么乐观锁也算同步?

回到你的审核场景:

线程A查询 → 状态待审核,版本=1 线程B查询 → 状态待审核,版本=1 线程A提交 → UPDATE ... WHERE 版本=1 → 成功,版本变成2 线程B提交 → UPDATE ... WHERE 版本=1 → 失败(版本已经是2了)

虽然 A 和 B同时查到了旧数据,但数据库最终只让一个线程修改成功

这就是同步——系统通过版本号机制,在写操作这一步强制达成了"同一时刻只有一个线程能真正修改成功"的效果

另一个线程被打回,要么重试(重新查询最新版本再改),要么直接报错退出。


一句话总结

悲观锁= 同步靠"保安堵门"(互斥)
乐观锁= 同步靠"事后对账"(冲突检测)

两者都解决了竞态条件,只是悲观锁在入口处排队,乐观锁在出口处筛选。最终都是让系统从"可能同时审核两次"变成"只会审核一次"。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 0:54:56

Sunshine游戏串流服务器:打造你的个人云端游戏平台

Sunshine游戏串流服务器:打造你的个人云端游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏?Sunshine游戏串流服务器是你…

作者头像 李华
网站建设 2026/5/13 0:52:26

AutoClicker:专业级Windows鼠标自动化工具深度解析

AutoClicker:专业级Windows鼠标自动化工具深度解析 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 项目概述与核心价值 在当今数字化工作环境中…

作者头像 李华
网站建设 2026/5/13 0:50:10

嵌入式与分立处理器选型指南:从核心概念到实战场景的深度解析

1. 嵌入式与分立处理器:一场持续十余年的设计哲学之争十多年前,在硅谷圣何塞的一场嵌入式系统大会上,一场名为“嵌入式 vs. 分立处理器”的辩论吸引了众多工程师的目光。辩论的双方,Jim Turley和Clive “Max” Maxfield&#xff0…

作者头像 李华
网站建设 2026/5/13 0:49:10

VSCode原生光标扩展:提升编码体验的渲染优化方案

1. 项目概述:为什么我们需要一个“原生”光标?在VSCode里敲代码,你有没有过那么一瞬间,觉得那个光标有点“不对劲”?它可能有点模糊,移动起来不够跟手,或者在某些主题下辨识度不高。如果你对UI细…

作者头像 李华