原始账户:bob=100, smith=0。四个写操作:t1(bob=0,smith=100),t2(smith=1,bob=99),假设smith只转bob 99,不转100.如果不锁,即便用版本+事务开始的时间戳,这四个操作对两个线程来说,因为线程可能在执行的中间被操作系统的线程调度暂停掉,所以次序是不可预知的
,有可能:t1(bob=0),t2(smith=1),t2(bob=99),t1(smith=100);根据你说的,t1回滚,bob=100,smith=0;提示bob转账不成功,可是这个结果还是与t2的结果冲突,t2的结果为(smith=1, bob=99),银行要找你麻烦了。
,有可能:t1(bob=0),t2(smith=1),t2(bob=99),t1(smith=100);根据你说的,t1回滚,bob=100,smith=0;提示bob转账不成功,可是这个结果还是与t2的结果冲突,t2的结果为(smith=1, bob=99),银行要找你麻烦了。
2016-09-19