我被锁住了
啦啦啦,啦啦啦,我是个卖锁的小行家~
呀!一不小心,我的锁掉河里了o(╥﹏╥)o
这时候,从河里浮上来一位河神,他捞起一把悲观锁,问我:“这是你掉的锁吗?”
我看了一眼,说:“不是。”
河神再次从河里捞起一把非公平锁,问我:“这是你的锁吗?”
我摇摇头说:“不是。”
河神又一次从河里捞起一把排它锁,问我:“这是你的锁吗?”
我看了一眼锁,然后转头对河神说:“你之前也是程序员吗?”
为什么要有锁当数据/资源只有一份,而为了提高性能,有多个线程或者client同时操作该数据/资源的时候,会出现结果不正确或者不一致的情况。比如,小明有500块钱,同时给小张和小李各转300块时,可能会出现下图中的情况:
sequenceDiagram
participant 小明
Note left of 小明: 余额500元
participant 小张
小明->>小张: 转账300元
Note right of 小张: 余额+300元
小明->>小李: 转账300元
Note right of 小李: 余额 ...
