
锁
改变一个数值的三个步骤:1. 把想修改的数从某个地方取出来。2. 把取出来的数值修改为期望值;3. 把修改后的数值保存到原来的地方。
当把数值取出来进行修改的时候,有另一个协程对同一个数值进行相同的操作,那么会造成数据错误。
悲观锁
悲观的锁总认为会发生并发问题。
共享锁
共享锁
又称为读锁,简称 S 锁。共享锁
就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
排他锁
排他锁
又称为写锁,简称 X 锁。排他锁
就是不能与其他锁并存,如果一个事务获取了一个数据行的 排他锁
,其他事务就不能再获取该行的其他锁,包括共享锁
和 排他锁
,但是获取 排他锁
的事务是可以对数据行读取和修改。
乐观锁
乐观的锁总认为不会发生并发问题。
工作方式
先修改完共享资源,再验证这段时间内有没有发生冲突,如果没有其他线程在修改资源,那么操作完成,如果发现有其他线程已经修改过这个资源,就放弃本次操作。