改变一个数值的三个步骤:1. 把想修改的数从某个地方取出来。2. 把取出来的数值修改为期望值;3. 把修改后的数值保存到原来的地方。
当把数值取出来进行修改的时候,有另一个协程对同一个数值进行相同的操作,那么会造成数据错误。

悲观锁

悲观的锁总认为会发生并发问题。

共享锁

共享锁 又称为读锁,简称 S 锁。共享锁 就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

排他锁

排他锁 又称为写锁,简称 X 锁。排他锁 就是不能与其他锁并存,如果一个事务获取了一个数据行的 排他锁,其他事务就不能再获取该行的其他锁,包括共享锁排他锁,但是获取 排他锁 的事务是可以对数据行读取和修改。

乐观锁

乐观的锁总认为不会发生并发问题。

工作方式

先修改完共享资源,再验证这段时间内有没有发生冲突,如果没有其他线程在修改资源,那么操作完成,如果发现有其他线程已经修改过这个资源,就放弃本次操作。