原始賬戶: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