原始账户: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
写和写并行的问题,我觉得可不可以这样,通过分组(可以小到单个记录),每个分组加他自己的写锁,同一个组内的写锁互斥,不同组的写锁不互斥就可以并行了,类似与ConcurrentHashMap中分段锁的概念
2016-08-22