Trong một ứng dụng chuyển tiền của 1 ngân hàng Việt Nam, có một bạn lập trình như sau:

1.  def transfer(A, B, amount):
2.   DB.transaction do
3.     if A.balance > amount
4.        A.balance -= amount
5.        A.save!
6.        B.balance += amount
7.        B.save!
8.     end
9.   end
10. end

Sau khi ứng dụng chạy được một thời gian thì quản lí hệ thống phát hiện tài khoản của vài người dùng bị âm. Bạn có thể giải thích tại sao? Và có cách nào để xử lí vấn đề này.

Update: amount không có âm nhé các bạn (trường hợp này quá đơn giản nên tụi mình cũng bỏ qua luôn).