传统的锁都是悲观锁,它们都假设共享资源会有多个线程并行访问,所以在访问前一定要拿锁。
但是有些场景下,共享资源并不经常存在并行访问,所以很多时候锁拿了个寂寞。乐观锁指的是在访问资源时不立即加锁,而是在保存更改时进行检查,确认没有其他线程对资源进行了修改。如果发现冲突,则会撤销或重试操作。
乐观锁又称作“无锁机制”。其实 Git 仓库多人协作就是一种乐观锁,我们向代码仓库提交的时候并不需要拿到仓库锁,而是在出现冲突后再进行 merge 处理。
传统的锁都是悲观锁,它们都假设共享资源会有多个线程并行访问,所以在访问前一定要拿锁。
但是有些场景下,共享资源并不经常存在并行访问,所以很多时候锁拿了个寂寞。乐观锁指的是在访问资源时不立即加锁,而是在保存更改时进行检查,确认没有其他线程对资源进行了修改。如果发现冲突,则会撤销或重试操作。
乐观锁又称作“无锁机制”。其实 Git 仓库多人协作就是一种乐观锁,我们向代码仓库提交的时候并不需要拿到仓库锁,而是在出现冲突后再进行 merge 处理。